]> git.lizzy.rs Git - minetest.git/commitdiff
Get rid of LuaJIT linking workarounds
authorsfan5 <sfan5@live.de>
Mon, 26 Sep 2022 14:05:00 +0000 (16:05 +0200)
committersfan5 <sfan5@live.de>
Thu, 13 Oct 2022 21:02:11 +0000 (23:02 +0200)
...and replace them with a cautionary warning message if someone uses an old version.
The detection is kind of a hack but no choice as upstream is not interested in version numbering.

src/CMakeLists.txt

index ee6409366fc193dcff2188b0370d1e903bd254f3..34341866880a9e96fca8bd1ef7a6c955d3dc0448 100644 (file)
@@ -672,9 +672,27 @@ endif()
 # Set some optimizations and tweaks
 
 include(CheckCSourceCompiles)
-
-if(NOT USE_LUAJIT)
-       set(CMAKE_REQUIRED_INCLUDES ${LUA_INCLUDE_DIR})
+include(CheckSymbolExists)
+
+set(CMAKE_REQUIRED_INCLUDES ${LUA_INCLUDE_DIR})
+if(USE_LUAJIT)
+       set(CMAKE_REQUIRED_LIBRARIES ${LUA_LIBRARY})
+       # LuaJIT provides exactly zero ways to determine how recent it is (the version
+       # is unchanged since 2017), however it happens that string buffers were added
+       # after the changes which we care about so that works as an indicator.
+       # (https://github.com/LuaJIT/LuaJIT/commit/4c6b669 March 2021)
+       unset(HAVE_RECENT_LJ CACHE)
+       check_symbol_exists(luaopen_string_buffer "lualib.h" HAVE_RECENT_LJ)
+       if(NOT HAVE_RECENT_LJ)
+               string(CONCAT explanation_msg
+                       "You are using a relatively old version of LuaJIT. We recommend "
+                       "running a recent version (from git) as older ones are known not "
+                       "to build/work correctly in all cases.\n"
+                       "THIS APPLIES ESPECIALLY ON macOS OR Linux/aarch64!")
+               message(WARNING ${explanation_msg})
+       endif()
+else()
+       set(CMAKE_REQUIRED_LIBRARIES "")
        unset(HAVE_ATCCALL CACHE)
        # Note: we need to check the function without having the library
        #       available for linking, so check_symbol_exists won't work.
@@ -732,26 +750,6 @@ else()
                set(RELEASE_WARNING_FLAGS "")
        endif()
 
-       if(APPLE AND USE_LUAJIT)
-               # required per http://luajit.org/install.html
-               SET(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000")
-       elseif(UNIX AND USE_LUAJIT)
-               check_c_source_compiles("#ifndef __aarch64__\n#error\n#endif\nint main(){}" IS_AARCH64)
-               if(IS_AARCH64)
-                       # Move text segment below LuaJIT's 47-bit limit (see issue #9367)
-                       if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
-                               # FreeBSD uses lld, and lld does not support -Ttext-segment, suggesting
-                               # --image-base instead. Not sure if it's equivalent change for the purpose
-                               # but at least if fixes build on FreeBSD/aarch64
-                               # XXX: the condition should also be changed to check for lld regardless of
-                               # os, bit CMake doesn't have anything like CMAKE_LINKER_IS_LLD yet
-                               SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--image-base=0x200000000")
-                       else()
-                               SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Ttext-segment=0x200000000")
-                       endif()
-               endif()
-       endif()
-
        if(MINGW)
                set(OTHER_FLAGS "${OTHER_FLAGS} -mthreads -fexceptions")
                set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN32_LEAN_AND_MEAN")