Browse Source

Upgrade to LuaJIT v2.1 (unstable) branch.

Yao Wei Tjong 姚伟忠 10 years ago
parent
commit
e61cf6fc40

+ 5 - 3
CMake/Modules/Urho3D-CMake-common.cmake

@@ -607,12 +607,14 @@ else ()
             set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math")
             set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math")
             if (URHO3D_64BIT)
-                set (DASH_MBIT -m64)    # This variable is intentionally not defined on Android and RPI platform, it is used again in LuaJIT library build
+                set (DASH_MBIT -m64)    # This variable is intentionally not defined on Android and RPI platform, it is used again in LuaJIT sub-library build
             else ()
                 set (DASH_MBIT -m32)
                 if (URHO3D_SSE)
-                    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2")
-                    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
+                    # The effective SSE level could be higher, see also URHO3D_DEPLOYMENT_TARGET and CMAKE_OSX_DEPLOYMENT_TARGET build options
+                    # The -mfpmath=sse is not set in global scope but it may be set in local scope when building LuaJIT sub-library for x86 arch
+                    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -msse2")
+                    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -msse2")
                 endif ()
             endif ()
             set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DASH_MBIT}")

+ 192 - 186
Source/ThirdParty/LuaJIT/CMakeLists.txt

@@ -39,6 +39,11 @@ endif ()
 
 # Makefile: Features
 #
+# Undocumented in the original Makefile yet, but it seems to be a new option which is only used when targeting Xbox One
+if (LUAJIT_ENABLE_GC64)
+    add_definitions (-DLUAJIT_ENABLE_GC64)
+endif ()
+
 # Permanently disable the FFI extension to reduce the size of the LuaJIT
 # executable. But please consider that the FFI library is compiled-in,
 # but NOT loaded by default. It only allocates any memory, if you actually
@@ -72,8 +77,10 @@ endif ()
 #
 # Use the system provided memory allocator (realloc) instead of the
 # bundled memory allocator. This is slower, but sometimes helpful for
-# debugging. It's helpful for Valgrind's memcheck tool, too. This option
-# cannot be enabled on x64, since the built-in allocator is mandatory.
+# debugging. This option cannot be enabled on x64, since realloc usually
+# doesn't return addresses in the right address range.
+# OTOH this option is mandatory for Valgrind's memcheck tool on x64 and
+# the only way to get useful results from it for all other architectures.
 if (LUAJIT_USE_SYSMALLOC)
     add_definitions (-DLUAJIT_USE_SYSMALLOC)
 endif ()
@@ -104,209 +111,207 @@ if (LUA_USE_ASSERT)
     add_definitions (-DLUA_USE_ASSERT)
 endif ()
 
-# Makefile: Flags and options for host and target
-if (MSVC)
-    if (LUAJIT_DISABLE_FFI)
-        set (MSVC_HASFFI 0)
-    else ()
-        set (MSVC_HASFFI 1)
-    endif ()
-    set (TARGET_TESTARCH "LJ_HASFFI ${MSVC_HASFFI}\n")
+# Makefile: Host system detection.
+if (CMAKE_HOST_WIN32)
+    set (HOST_SYS Windows)
+else ()
+    execute_process (COMMAND uname -s OUTPUT_VARIABLE HOST_SYS ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+endif ()
 
-    if (LUAJIT_DISABLE_JIT)
-        set (MSVC_HASJIT 0)
+# Macro for finding a substring in TARGET_TESTARCH variable
+macro (find_string find_regex output_var)
+    message (STATUS "Detecting LuaJIT ${output_var}")
+    string (REGEX MATCH ${find_regex} matched "${TARGET_TESTARCH}")     # Stringify to guard against empty string
+    if (matched)
+        string (REGEX MATCH "\\(.*\\)" captured "${find_regex}")
+        if (captured)
+            string (REGEX REPLACE ${find_regex} \\1 matched "${matched}")
+        endif ()
+        set (${output_var} ${matched})
+        message (STATUS "Detecting LuaJIT ${output_var} - found (${matched})")
     else ()
-        set (MSVC_HASJIT 1)
+        message (STATUS "Detecting LuaJIT ${output_var} - not found")
     endif ()
-    set (TARGET_TESTARCH "${TARGET_TESTARCH} LJ_HASJIT ${MSVC_HASJIT}\n")
+endmacro ()
 
-    if (URHO3D_64BIT)
-        set (MSVC_ARCH_BITS 64)
-        set (MSVC_TARGET_ARCH X64)
+# Makefile: Flags and options for host and target
+if (NOT LUAJIT_CACHE STREQUAL "${URHO3D_64BIT}-${LUAJIT_DISABLE_FFI}-${LUAJIT_DISABLE_JIT}-${LUAJIT_ENABLE_GC64}-${LUAJIT_NUMMODE}")
+    if (MSVC)
+        if (URHO3D_64BIT)
+            set (MSVC_ARCH_BITS 64)
+            set (MSVC_TARGET_ARCH X64)
+        else ()
+            set (MSVC_ARCH_BITS 32)
+            set (MSVC_TARGET_ARCH X86)
+        endif ()
+        if (LUAJIT_DISABLE_FFI)
+            set (MSVC_HASFFI 0)
+        else ()
+            set (MSVC_HASFFI 1)
+        endif ()
+        if (LUAJIT_DISABLE_JIT)
+            set (MSVC_HASJIT 0)
+        else ()
+            set (MSVC_HASJIT 1)
+        endif ()
+        set (TARGET_TESTARCH
+            "LJ_TARGET_${MSVC_TARGET_ARCH} 1\n"
+            "LJ_ARCH_BITS ${MSVC_ARCH_BITS}\n"
+            "LJ_HASFFI ${MSVC_HASFFI}\n"
+            "LJ_HASJIT ${MSVC_HASJIT}\n"
+            "LJ_ARCH_HASFPU 1\n"
+            "LJ_ABI_SOFTFP 0\n")
     else ()
-        set (MSVC_ARCH_BITS 32)
-        set (MSVC_TARGET_ARCH X86)
+        string (REPLACE " " ";" TARGET_TCFLAGS "${CMAKE_C_FLAGS}")   # Convert string of flags to list of flags
+        get_directory_property (COMPILE_DEFINITIONS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_DEFINITIONS)
+        string (REPLACE ";" ";-D" COMPILE_DEFINITIONS "-D${COMPILE_DEFINITIONS}")    # Prefix defines with -D
+        execute_process (COMMAND egrep -V RESULT_VARIABLE EGREP_EXIT_CODE OUTPUT_QUIET ERROR_QUIET)
+        if (EGREP_EXIT_CODE EQUAL 0)
+            set (FILTER COMMAND egrep "LJ_|MIPSEL")
+        endif ()
+        execute_process (COMMAND ${CMAKE_C_COMPILER} ${COMPILE_DEFINITIONS} ${TARGET_TCFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/src/lj_arch.h -E -dM
+            ${FILTER} OUTPUT_VARIABLE TARGET_TESTARCH ERROR_QUIET)
     endif ()
-    set (TARGET_TESTARCH "${TARGET_TESTARCH} LJ_ARCH_BITS ${MSVC_ARCH_BITS}\n")
-    set (TARGET_TESTARCH "${TARGET_TESTARCH} LJ_TARGET_${MSVC_TARGET_ARCH} 1\n")
-
-    if (URHO3D_SSE AND NOT URHO3D_64BIT)
-        set (TARGET_TESTARCH "${TARGET_TESTARCH} __SSE2__ 1\n")
+    find_string ("LJ_TARGET_(X64|X86|ARM|ARM64|PS3|PPC|MIPS) 1" TARGET_LJARCH)
+    if (NOT TARGET_LJARCH)
+        message (FATAL_ERROR "Unsupported target architecture")
     endif ()
-
-    # More assumptions
-    set (TARGET_TESTARCH "${TARGET_TESTARCH} LJ_ARCH_HASFPU 1\n")
-    set (TARGET_TESTARCH "${TARGET_TESTARCH} LJ_ABI_SOFTFP 0\n")
-else ()
-    set (TARGET_TCFLAGS ${CMAKE_C_FLAGS})
-    string (REPLACE " " ";" TARGET_TCFLAGS "${TARGET_TCFLAGS}")
-    execute_process (COMMAND egrep -V RESULT_VARIABLE EGREP_EXIT_CODE OUTPUT_QUIET ERROR_QUIET)
-    if (EGREP_EXIT_CODE EQUAL 0)
-        execute_process (COMMAND ${CMAKE_C_COMPILER} ${TARGET_TCFLAGS} -E ${CMAKE_CURRENT_SOURCE_DIR}/src/lj_arch.h -dM
-            COMMAND egrep "LJ_|MIPSEL|__SSE2__" OUTPUT_VARIABLE TARGET_TESTARCH ERROR_QUIET)
-    else ()
-        execute_process (COMMAND ${CMAKE_C_COMPILER} ${TARGET_TCFLAGS} -E ${CMAKE_CURRENT_SOURCE_DIR}/src/lj_arch.h -dM OUTPUT_VARIABLE TARGET_TESTARCH ERROR_QUIET)
+    string (TOLOWER ${TARGET_LJARCH} TARGET_LJARCH)
+    if (TARGET_LJARCH STREQUAL ppc)
+        find_string ("LJ_LE (1)" LUAJIT_LE)
+        if (LUAJIT_LE)
+            set (TARGET_ARCH ${TARGET_ARCH} -DLJ_ARCH_ENDIAN=LUAJIT_LE)
+        else ()
+            set (TARGET_ARCH ${TARGET_ARCH} -DLJ_ARCH_ENDIAN=LUAJIT_BE)
+        endif ()
+    elseif (TARGET_LJARCH STREQUAL mips)
+        find_string ("MIPSEL (1)" MIPSEL)
+        if (MIPSEL)
+            set (TARGET_ARCH ${TARGET_ARCH} -D__MIPSEL__=1)
+        endif ()
+    elseif (TARGET_LJARCH STREQUAL ps3)
+        set (TARGET_SYS PS3)
+        set (TARGET_ARCH ${TARGET_ARCH} -D__CELLOS_LV2__)
+        add_definitions (-DLUAJIT_USE_SYSMALLOC)
     endif ()
-endif ()
-
-# Macro for finding a substring in TARGET_TESTARCH variable
-macro (find_string find_regex output_var)
-    if (NOT DEFINED ${output_var})
-        message (STATUS "Finding value for LuaJIT:${output_var}")
-        string (REGEX MATCH ${find_regex} matched ${TARGET_TESTARCH})
-        if (matched)
-            string (REGEX MATCH "\\(.*\\)" captured ${find_regex})
-            if (captured)
-                string (REGEX REPLACE ${find_regex} \\1 matched ${matched})
-            endif ()
-
-            # Special case handling to cater for URHO3D_64BIT build option
-            if (${output_var} STREQUAL TARGET_LJARCH)
-                string (TOLOWER ${matched} matched)
-                if (matched STREQUAL x64 AND NOT URHO3D_64BIT)
-                    set (matched x86)
-                endif ()
-            elseif (${output_var} STREQUAL ARCH_BITS)
-                if (matched EQUAL 64 AND NOT URHO3D_64BIT)
-                    set (matched 32)
-                endif ()
-            endif ()
-
-            set (${output_var} ${matched} CACHE INTERNAL "LUAJIT INTERNAL - ${output_var}")
-            message (STATUS "Finding value for LuaJIT:${output_var} - found (${matched})")
+    set (TARGET_ARCH ${TARGET_ARCH} -DLUAJIT_TARGET=LUAJIT_ARCH_${TARGET_LJARCH})
+
+    # Makefile: Target system detection
+    if (IOS)
+        set (TARGET_SYS iOS)
+    elseif (ANDROID OR RPI)
+        set (TARGET_SYS Linux)
+    elseif (MINGW)
+        set (TARGET_SYS Windows)
+    elseif (NOT TARGET_SYS)
+        set (TARGET_SYS ${HOST_SYS})
+    endif ()
+    if (NOT HOST_SYS STREQUAL TARGET_SYS)
+        if (TARGET_SYS STREQUAL Windows)
+            set (HOST_XCFLAGS ${HOST_XCFLAGS} -malign-double -DLUAJIT_OS=LUAJIT_OS_WINDOWS)
+        elseif (TARGET_SYS STREQUAL Linux)
+            set (HOST_XCFLAGS ${HOST_XCFLAGS} -DLUAJIT_OS=LUAJIT_OS_LINUX)
+        elseif (TARGET_SYS MATCHES Darwin|iOS)
+            set (HOST_XCFLAGS ${HOST_XCFLAGS} -DLUAJIT_OS=LUAJIT_OS_OSX)
         else ()
-            set (${output_var} 0 CACHE INTERNAL "LUAJIT INTERNAL - ${output_var}")
-            message (STATUS "Finding value for LuaJIT:${output_var} - not found")
+            set (HOST_XCFLAGS ${HOST_XCFLAGS} -DLUAJIT_OS=LUAJIT_OS_OTHER)
         endif ()
     endif ()
-endmacro ()
 
-find_string ("LJ_TARGET_(X64|X86|ARM|PPC|PPCSPE|MIPS) 1" TARGET_LJARCH)
-if (NOT TARGET_LJARCH)
-    message (FATAL_ERROR "Unsupported target architecture")
-endif ()
-if (TARGET_LJARCH STREQUAL mips)
-    find_string ("MIPSEL (1)" MIPSEL)
-    if (MIPSEL)
-        set (TARGET_ARCH ${TARGET_ARCH} -D__MIPSEL__=1)
+    # Makefile: Files and pathnames
+    set (DASM_ARCH ${TARGET_LJARCH})
+    find_string ("LJ_ARCH_BITS ([^\\n]*)" ARCH_BITS)    # Workaround for "LJ_ARCH_BITS (.*?)\\n" as CMake does not understand non-greedy quantifier
+    if (ARCH_BITS EQUAL 64)
+        set (DASM_AFLAGS ${DASM_AFLAGS} -D P64)
     endif ()
-endif ()
-
-find_string ("LJ_TARGET_PS3 (1)" PS3)
-if (PS3)
-    set (TARGET_SYS PS3)
-    set (TARGET_ARCH ${TARGET_ARCH} -D__CELLOS_LV2__)
-    add_definitions (-DLUAJIT_USE_SYSMALLOC)
-endif ()
-
-find_string ("LJ_NO_UNWIND (1)" NO_UNWIND)
-if (NO_UNWIND)
-    set (TARGET_ARCH ${TARGET_ARCH} -DLUAJIT_NO_UNWIND)
-endif ()
-
-set (TARGET_ARCH ${TARGET_ARCH} -DLUAJIT_TARGET=LUAJIT_ARCH_${TARGET_LJARCH})
-
-# Makefile: System detection
-if (CMAKE_HOST_WIN32)
-    set (HOST_SYS Windows)
-else ()
-    execute_process (COMMAND uname -s OUTPUT_VARIABLE HOST_SYS ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
-endif ()
-if (IOS)
-    set (TARGET_SYS iOS)
-elseif (ANDROID OR RPI)
-    set (TARGET_SYS Linux)
-elseif (MINGW)
-    set (TARGET_SYS Windows)
-elseif (NOT TARGET_SYS)
-    set (TARGET_SYS ${HOST_SYS})
-endif ()
-if (NOT HOST_SYS STREQUAL TARGET_SYS)
-    if (TARGET_SYS STREQUAL Windows)
-        set (HOST_XCFLAGS ${HOST_XCFLAGS} -malign-double -DLUAJIT_OS=LUAJIT_OS_WINDOWS)
-    elseif (TARGET_SYS STREQUAL Linux)
-        set (HOST_XCFLAGS ${HOST_XCFLAGS} -DLUAJIT_OS=LUAJIT_OS_LINUX)
-    elseif (TARGET_SYS MATCHES Darwin|iOS)
-        set (HOST_XCFLAGS ${HOST_XCFLAGS} -DLUAJIT_OS=LUAJIT_OS_OSX)
-    else ()
-        set (HOST_XCFLAGS ${HOST_XCFLAGS} -DLUAJIT_OS=LUAJIT_OS_OTHER)
+    find_string ("LJ_HASJIT (1)" HASJIT)
+    if (HASJIT)
+        set (DASM_AFLAGS ${DASM_AFLAGS} -D JIT)
     endif ()
-endif ()
-
-# Makefile: Files and pathnames
-set (DASM_ARCH ${TARGET_LJARCH})
-
-# Below regex is a workaround for "LJ_ARCH_BITS (.*?)\\n" as CMake does not understand non-greedy quantifier
-find_string ("LJ_ARCH_BITS ([^\\n]*)" ARCH_BITS)
-if (ARCH_BITS EQUAL 64)
-    set (DASM_AFLAGS ${DASM_AFLAGS} -D P64)
-endif ()
-
-find_string ("LJ_HASJIT (1)" HASJIT)
-if (HASJIT)
-    set (DASM_AFLAGS ${DASM_AFLAGS} -D JIT)
-endif ()
-
-find_string ("LJ_HASFFI (1)" HASFFI)
-if (HASFFI)
-    set (DASM_AFLAGS ${DASM_AFLAGS} -D FFI)
-endif ()
-
-find_string ("LJ_DUALNUM (1)" DUALNUM)
-if (DUALNUM)
-    set (DASM_AFLAGS ${DASM_AFLAGS} -D DUALNUM)
-endif ()
-
-find_string ("LJ_ARCH_HASFPU (1)" ARCH_HASFPU)
-if (ARCH_HASFPU)
-    set (DASM_AFLAGS ${DASM_AFLAGS} -D FPU)
-endif ()
-set (TARGET_ARCH ${TARGET_ARCH} -DLJ_ARCH_HASFPU=${ARCH_HASFPU})
-
-find_string ("LJ_ABI_SOFTFP (1)" ABI_SOFTFP)
-if (NOT ABI_SOFTFP)
-    set (DASM_AFLAGS ${DASM_AFLAGS} -D HFABI)
-endif ()
-set (TARGET_ARCH ${TARGET_ARCH} -DLJ_ABI_SOFTFP=${ABI_SOFTFP})
-
-# Below regex is a workaround for "LJ_ARCH_VERSION (.*?)\\n" as CMake does not understand non-greedy quantifier
-find_string ("LJ_ARCH_VERSION ([^\\n]*)" ARCH_VERSION)
-set (DASM_AFLAGS ${DASM_AFLAGS} -D VER=${ARCH_VERSION})
-
-if (TARGET_SYS STREQUAL Windows)
-    set (DASM_AFLAGS ${DASM_AFLAGS} -D WIN)
-endif ()
-
-if (TARGET_LJARCH STREQUAL x86)
-    find_string ("__SSE2__ (1)" SSE2)
-    if (SSE2)
-        set (DASM_AFLAGS ${DASM_AFLAGS} -D SSE)
+    find_string ("LJ_HASFFI (1)" HASFFI)
+    if (HASFFI)
+        set (DASM_AFLAGS ${DASM_AFLAGS} -D FFI)
     endif ()
-elseif (TARGET_LJARCH STREQUAL x64)
-    set (DASM_ARCH x86)
-elseif (TARGET_LJARCH STREQUAL arm)
-    if (TARGET_SYS STREQUAL iOS)
-        set (DASM_AFLAGS ${DASM_AFLAGS} -D IOS)
+    find_string ("LJ_DUALNUM (1)" DUALNUM)
+    if (DUALNUM)
+        set (DASM_AFLAGS ${DASM_AFLAGS} -D DUALNUM)
     endif ()
-elseif (TARGET_LJARCH STREQUAL ppc)
-    find_string ("LJ_ARCH_SQRT (1)" ARCH_SQRT)
-    if (ARCH_SQRT)
-        set (DASM_AFLAGS ${DASM_AFLAGS} -D SQRT)
+    find_string ("LJ_ARCH_HASFPU ([^\\n]*)" ARCH_HASFPU)
+    if (ARCH_HASFPU)
+        set (DASM_AFLAGS ${DASM_AFLAGS} -D FPU)
     endif ()
-    find_string ("LJ_ARCH_ROUND (1)" ARCH_ROUND)
-    if (ARCH_ROUND)
-        set (DASM_AFLAGS ${DASM_AFLAGS} -D ROUND)
+    set (TARGET_ARCH ${TARGET_ARCH} -DLJ_ARCH_HASFPU=${ARCH_HASFPU})
+    find_string ("LJ_ABI_SOFTFP ([^\\n]*)" ABI_SOFTFP)
+    if (NOT ABI_SOFTFP)
+        set (DASM_AFLAGS ${DASM_AFLAGS} -D HFABI)
     endif ()
-    find_string ("LJ_ARCH_PPC64 (1)" ARCH_PPC64)
-    if (ARCH_PPC64)
-        set (DASM_AFLAGS ${DASM_AFLAGS} -D GPR64)
+    set (TARGET_ARCH ${TARGET_ARCH} -DLJ_ABI_SOFTFP=${ABI_SOFTFP})
+    find_string ("LJ_NO_UNWIND (1)" NO_UNWIND)
+    if (NO_UNWIND)
+        set (DASM_AFLAGS ${DASM_AFLAGS} -D NO_UNWIND)
+        set (TARGET_ARCH ${TARGET_ARCH} -DLUAJIT_NO_UNWIND)
     endif ()
-    if (TARGET_SYS STREQUAL PS3)
-        set (DASM_AFLAGS ${DASM_AFLAGS} -D PPE -D TOC)
+    find_string ("LJ_ARCH_VERSION ([^\\n]*)" ARCH_VERSION)
+    set (DASM_AFLAGS ${DASM_AFLAGS} -D VER=${ARCH_VERSION})
+    if (TARGET_SYS STREQUAL Windows)
+        set (DASM_AFLAGS ${DASM_AFLAGS} -D WIN)
     endif ()
+    if (TARGET_LJARCH STREQUAL x64)
+        find_string ("LJ_FR2 (1)" TWO_SLOT_FRAME)
+        if (NOT TWO_SLOT_FRAME)
+            set (DASM_ARCH x86)
+        endif ()
+    elseif (TARGET_LJARCH STREQUAL arm)
+        if (TARGET_SYS STREQUAL iOS)
+            set (DASM_AFLAGS ${DASM_AFLAGS} -D IOS)
+        endif ()
+    elseif (TARGET_LJARCH STREQUAL ppc)
+        find_string ("LJ_ARCH_SQRT (1)" ARCH_SQRT)
+        if (ARCH_SQRT)
+            set (DASM_AFLAGS ${DASM_AFLAGS} -D SQRT)
+        endif ()
+        find_string ("LJ_ARCH_ROUND (1)" ARCH_ROUND)
+        if (ARCH_ROUND)
+            set (DASM_AFLAGS ${DASM_AFLAGS} -D ROUND)
+        endif ()
+        find_string ("LJ_ARCH_PPC32ON64 (1)" ARCH_PPC32ON64)
+        if (ARCH_PPC32ON64)
+            set (DASM_AFLAGS ${DASM_AFLAGS} -D GPR64)
+        endif ()
+        if (TARGET_SYS STREQUAL PS3)
+            set (DASM_AFLAGS ${DASM_AFLAGS} -D PPE -D TOC)
+        endif ()
+        find_string ("LJ_ARCH_PPC64 (1)" ARCH_PPC64)
+        if (ARCH_PPC64)
+            set (DASM_ARCH ppc64)
+        endif ()
+    endif ()
+
+    set (LUAJIT_CACHE "${URHO3D_64BIT}-${LUAJIT_DISABLE_FFI}-${LUAJIT_DISABLE_JIT}-${LUAJIT_ENABLE_GC64}-${LUAJIT_NUMMODE}" CACHE INTERNAL "LuaJIT - cache invalidator")
+    set (TARGET_LJARCH ${TARGET_LJARCH} CACHE INTERNAL "LuaJIT - target architecture")
+    set (TARGET_ARCH ${TARGET_ARCH} CACHE INTERNAL "LuaJIT - flags and options for target architecture")
+    set (DASM_ARCH ${DASM_ARCH} CACHE INTERNAL "LuaJIT - dynasm architecture")
+    set (DASM_FLAGS ${DASM_XFLAGS} ${DASM_AFLAGS} CACHE INTERNAL "LuaJIT - flags for dynasm")
+    set (HOST_XCFLAGS ${HOST_XCFLAGS} CACHE INTERNAL "LuaJIT - host compiler flags")
 endif ()
 
-set (DASM_FLAGS ${DASM_XFLAGS} ${DASM_AFLAGS})
+# Note that we have intentionally deviated from original Makefile for the following cases
+if (NOT MSVC AND LUAJIT_NO_STACK_PROTECTION)
+    # Original Makefile attempts to set -fno-stack-protector for non-MSVC compiler whenever it supports this flag, but we decided not to use this flag by default (use LUAJIT_NO_STACK_PROTECTION build option to override)
+    execute_process (COMMAND ${CMAKE_COMMAND} -E echo COMMAND ${CMAKE_C_COMPILER} -fno-stack-protector -E - RESULT_VARIABLE EXIT_CODE OUTPUT_QUIET ERROR_QUIET)
+    if (EXIT_CODE STREQUAL 0)
+        set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-stack-protector")
+    endif ()
+endif ()
+if (TARGET_LJARCH STREQUAL x86)
+    # Original Makefile enables the SSE when targeting x86 regardless, but we only enable it when URHO3D_SSE build option is also set
+    if (URHO3D_SSE)
+        set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpmath=sse")     # When URHO3D_SSE is set then -msse -msse2 should be already configured at the global scope
+    endif ()
+elseif (TARGET_LJARCH STREQUAL arm64)
+    # Original Makefile only sets this flags for 64-bit iOS, but we set it for arm64 in general instead
+    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer")
+endif ()
 
 # Makefile: Build mode handling
 # Urho3D only builds static LuaJIT library
@@ -357,7 +362,7 @@ if (WIN32)
     set (LJVM_MODE peobj)
     set (LJVM_BOUT lj_vm.obj)
 else ()
-    set (LJVM_BOUT lj_vm.s)
+    set (LJVM_BOUT lj_vm.S)
     enable_language (ASM)
     set (CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${DASH_MBIT}")
     if (APPLE)
@@ -379,10 +384,11 @@ generate_source (lj_folddef.h folddef src/lj_opt_fold.c)
 if (URHO3D_LUAJIT_AMALG)
     set (LJCORE_C src/ljamalg.c)
 else ()
-    set (LJCORE_C src/lj_gc.c src/lj_err.c src/lj_char.c src/lj_bc.c src/lj_obj.c
+    set (LJCORE_C src/lj_gc.c src/lj_err.c src/lj_char.c src/lj_bc.c src/lj_obj.c src/lj_buf.c
         src/lj_str.c src/lj_tab.c src/lj_func.c src/lj_udata.c src/lj_meta.c src/lj_debug.c
         src/lj_state.c src/lj_dispatch.c src/lj_vmevent.c src/lj_vmmath.c src/lj_strscan.c
-        src/lj_api.c src/lj_lex.c src/lj_parse.c src/lj_bcread.c src/lj_bcwrite.c src/lj_load.c
+        src/lj_strfmt.c src/lj_api.c src/lj_profile.c
+        src/lj_lex.c src/lj_parse.c src/lj_bcread.c src/lj_bcwrite.c src/lj_load.c
         src/lj_ir.c src/lj_opt_mem.c src/lj_opt_fold.c src/lj_opt_narrow.c
         src/lj_opt_dce.c src/lj_opt_loop.c src/lj_opt_split.c src/lj_opt_sink.c
         src/lj_mcode.c src/lj_snap.c src/lj_record.c src/lj_crecord.c src/lj_ffrecord.c

+ 1 - 1
Source/ThirdParty/LuaJIT/src/host/CMakeLists.txt

@@ -21,7 +21,7 @@
 #
 
 if (CMAKE_PROJECT_NAME STREQUAL Urho3D-ExternalProject-tolua++)
-    # Do not install the buildvm host tool from tolua++ external project because it is built for targetting host system itself
+    # Do not install the buildvm host tool from tolua++ external project because it is built for targeting host system itself
     # We only want to keep the buildvm host tool which is built for cross-compiling target (the one built from internal LuaJIT CMake-target)
     set (DEST_RUNTIME_DIR "")   # In this particular case, it is not equivalent to unset() the variable
 elseif (NOT CMAKE_PROJECT_NAME STREQUAL Urho3D)

+ 0 - 93
Source/ThirdParty/LuaJIT/src/psvitabuild.bat

@@ -1,93 +0,0 @@
-@rem Script to build LuaJIT with the PS Vita SDK.
-@rem Donated to the public domain.
-@rem
-@rem Open a "Visual Studio .NET Command Prompt" (32 bit host compiler)
-@rem Then cd to this directory and run this script.
-
-@if not defined INCLUDE goto :FAIL
-@if not defined SCE_PSP2_SDK_DIR goto :FAIL
-
-@setlocal
-@rem ---- Host compiler ----
-@set LJCOMPILE=cl /nologo /c /MD /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE
-@set LJLINK=link /nologo
-@set LJMT=mt /nologo
-@set DASMDIR=..\dynasm
-@set DASM=%DASMDIR%\dynasm.lua
-@set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c
-
-%LJCOMPILE% host\minilua.c
-@if errorlevel 1 goto :BAD
-%LJLINK% /out:minilua.exe minilua.obj
-@if errorlevel 1 goto :BAD
-if exist minilua.exe.manifest^
-  %LJMT% -manifest minilua.exe.manifest -outputresource:minilua.exe
-
-@rem Check for 32 bit host compiler.
-@minilua
-@if errorlevel 8 goto :FAIL
-
-@set DASMFLAGS=-D FPU -D HFABI
-minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h vm_arm.dasc
-@if errorlevel 1 goto :BAD
-
-%LJCOMPILE% /I "." /I %DASMDIR% -DLUAJIT_TARGET=LUAJIT_ARCH_ARM -DLUAJIT_OS=LUAJIT_OS_OTHER -DLUAJIT_DISABLE_JIT -DLUAJIT_DISABLE_FFI -DLJ_TARGET_PSVITA=1 host\buildvm*.c
-@if errorlevel 1 goto :BAD
-%LJLINK% /out:buildvm.exe buildvm*.obj
-@if errorlevel 1 goto :BAD
-if exist buildvm.exe.manifest^
-  %LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exe
-
-buildvm -m elfasm -o lj_vm.s
-@if errorlevel 1 goto :BAD
-buildvm -m bcdef -o lj_bcdef.h %ALL_LIB%
-@if errorlevel 1 goto :BAD
-buildvm -m ffdef -o lj_ffdef.h %ALL_LIB%
-@if errorlevel 1 goto :BAD
-buildvm -m libdef -o lj_libdef.h %ALL_LIB%
-@if errorlevel 1 goto :BAD
-buildvm -m recdef -o lj_recdef.h %ALL_LIB%
-@if errorlevel 1 goto :BAD
-buildvm -m vmdef -o jit\vmdef.lua %ALL_LIB%
-@if errorlevel 1 goto :BAD
-buildvm -m folddef -o lj_folddef.h lj_opt_fold.c
-@if errorlevel 1 goto :BAD
-
-@rem ---- Cross compiler ----
-@set LJCOMPILE="%SCE_PSP2_SDK_DIR%\host_tools\build\bin\psp2snc" -c -w -DLUAJIT_DISABLE_FFI -DLUAJIT_USE_SYSMALLOC
-@set LJLIB="%SCE_PSP2_SDK_DIR%\host_tools\build\bin\psp2ld32" -r --output=
-@set INCLUDE=""
-
-"%SCE_PSP2_SDK_DIR%\host_tools\build\bin\psp2as" -o lj_vm.o lj_vm.s
-
-@if "%1" neq "debug" goto :NODEBUG
-@shift
-@set LJCOMPILE=%LJCOMPILE% -g -O0
-@set TARGETLIB=libluajitD.a
-goto :BUILD
-:NODEBUG
-@set LJCOMPILE=%LJCOMPILE% -O2
-@set TARGETLIB=libluajit.a
-:BUILD
-del %TARGETLIB%
-
-%LJCOMPILE% ljamalg.c
-@if errorlevel 1 goto :BAD
-%LJLIB%%TARGETLIB% ljamalg.o lj_vm.o
-@if errorlevel 1 goto :BAD
-
-@del *.o *.obj *.manifest minilua.exe buildvm.exe
-@echo.
-@echo === Successfully built LuaJIT for PS Vita ===
-
-@goto :END
-:BAD
-@echo.
-@echo *******************************************************
-@echo *** Build FAILED -- Please check the error messages ***
-@echo *******************************************************
-@goto :END
-:FAIL
-@echo To run this script you must open a "Visual Studio .NET Command Prompt"
-@echo (32 bit host compiler). The PS Vita SDK must be installed, too.
-:END

+ 0 - 101
Source/ThirdParty/LuaJIT/src/xb1build.bat

@@ -1,101 +0,0 @@
-@rem Script to build LuaJIT with the Xbox One SDK.
-@rem Donated to the public domain.
-@rem
-@rem Open a "Visual Studio .NET Command Prompt" (64 bit host compiler)
-@rem Then cd to this directory and run this script.
-
-@if not defined INCLUDE goto :FAIL
-@if not defined DurangoXDK goto :FAIL
-
-@setlocal
-@echo ---- Host compiler ----
-@set LJCOMPILE=cl /nologo /c /MD /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE /DLUAJIT_ENABLE_GC64
-@set LJLINK=link /nologo
-@set LJMT=mt /nologo
-@set DASMDIR=..\dynasm
-@set DASM=%DASMDIR%\dynasm.lua
-@set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c
-
-%LJCOMPILE% host\minilua.c
-@if errorlevel 1 goto :BAD
-%LJLINK% /out:minilua.exe minilua.obj
-@if errorlevel 1 goto :BAD
-if exist minilua.exe.manifest^
-  %LJMT% -manifest minilua.exe.manifest -outputresource:minilua.exe
-
-@rem Error out for 64 bit host compiler
-@minilua
-@if not errorlevel 8 goto :FAIL
-
-@set DASMFLAGS=-D WIN -D FFI -D P64
-minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h vm_x64.dasc
-@if errorlevel 1 goto :BAD
-
-%LJCOMPILE% /I "." /I %DASMDIR% /D_DURANGO host\buildvm*.c
-@if errorlevel 1 goto :BAD
-%LJLINK% /out:buildvm.exe buildvm*.obj
-@if errorlevel 1 goto :BAD
-if exist buildvm.exe.manifest^
-  %LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exe
-
-buildvm -m peobj -o lj_vm.obj
-@if errorlevel 1 goto :BAD
-buildvm -m bcdef -o lj_bcdef.h %ALL_LIB%
-@if errorlevel 1 goto :BAD
-buildvm -m ffdef -o lj_ffdef.h %ALL_LIB%
-@if errorlevel 1 goto :BAD
-buildvm -m libdef -o lj_libdef.h %ALL_LIB%
-@if errorlevel 1 goto :BAD
-buildvm -m recdef -o lj_recdef.h %ALL_LIB%
-@if errorlevel 1 goto :BAD
-buildvm -m vmdef -o jit\vmdef.lua %ALL_LIB%
-@if errorlevel 1 goto :BAD
-buildvm -m folddef -o lj_folddef.h lj_opt_fold.c
-@if errorlevel 1 goto :BAD
-
-@echo ---- Cross compiler ----
-
-@set CWD=%cd%
-@call "%DurangoXDK%\xdk\DurangoVars.cmd" XDK
-@cd /D "%CWD%"
-@shift
-
-@set LJCOMPILE="cl" /nologo /c /W3 /GF /Gm- /GR- /GS- /Gy /openmp- /D_CRT_SECURE_NO_DEPRECATE /D_LIB /D_UNICODE /D_DURANGO
-@set LJLIB="lib" /nologo
-
-@if "%1"=="debug" (
-  @shift
-  @set LJCOMPILE=%LJCOMPILE% /Zi /MDd /Od
-  @set LJLINK=%LJLINK% /debug 
-) else (
-  @set LJCOMPILE=%LJCOMPILE% /MD /O2 /DNDEBUG
-)
-
-@if "%1"=="amalg" goto :AMALG
-%LJCOMPILE% /DLUA_BUILD_AS_DLL lj_*.c lib_*.c
-@if errorlevel 1 goto :BAD
-%LJLIB% /OUT:luajit.lib lj_*.obj lib_*.obj
-@if errorlevel 1 goto :BAD
-@goto :NOAMALG
-:AMALG
-%LJCOMPILE% /DLUA_BUILD_AS_DLL ljamalg.c
-@if errorlevel 1 goto :BAD
-%LJLIB% /OUT:luajit.lib ljamalg.obj lj_vm.obj
-@if errorlevel 1 goto :BAD
-:NOAMALG
-
-@del *.obj *.manifest minilua.exe buildvm.exe
-@echo.
-@echo === Successfully built LuaJIT for Xbox One ===
-
-@goto :END
-:BAD
-@echo.
-@echo *******************************************************
-@echo *** Build FAILED -- Please check the error messages ***
-@echo *******************************************************
-@goto :END
-:FAIL
-@echo To run this script you must open a "Visual Studio .NET Command Prompt"
-@echo (64 bit host compiler). The Xbox One SDK must be installed, too.
-:END

+ 2 - 2
Source/Urho3D/CMakeLists.txt

@@ -139,7 +139,7 @@ if (URHO3D_LUA)
         endif ()
         ExternalProject_Add (tolua++
             SOURCE_DIR ${CMAKE_SOURCE_DIR}/Source/ThirdParty/toluapp/src/bin
-            CMAKE_ARGS -DURHO3D_LUAJIT=${URHO3D_LUAJIT} -DDEST_RUNTIME_DIR=${CMAKE_BINARY_DIR}/bin/tool -DBAKED_CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} ${IOS_FIX})
+            CMAKE_ARGS -DURHO3D_LUAJIT=${URHO3D_LUAJIT} -DURHO3D_LUAJIT_AMALG=${URHO3D_LUAJIT_AMALG} -DDEST_RUNTIME_DIR=${CMAKE_BINARY_DIR}/bin/tool -DBAKED_CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} ${IOS_FIX})
     else ()
         # Otherwise, build it internally as per normal
         add_subdirectory (../ThirdParty/toluapp/src/bin ../ThirdParty/toluapp/src/bin)
@@ -411,7 +411,7 @@ else ()
     set (LIB_DIR "-L\"\${libdir}\"")
     string (REPLACE ";" " -l" URHO3D_LIBS "-l${LIB_NAME};${LIBS}")
 endif ()
-string (REPLACE ";" " ${DASH}D" URHO3D_COMPILE_DEFINITIONS ";${URHO3D_COMPILE_DEFINITIONS}")
+string (REPLACE ";" " ${DASH}D" URHO3D_COMPILE_DEFINITIONS "${DASH}D${URHO3D_COMPILE_DEFINITIONS}")
 get_directory_property (GLOBAL_INCLUDE_DIRS DIRECTORY ${CMAKE_SOURCE_DIR} INCLUDE_DIRECTORIES)
 if (GLOBAL_INCLUDE_DIRS)
     string (REPLACE ";" "\" ${DASH}I\"" GLOBAL_INCLUDE_DIRS "${DASH}I\"${GLOBAL_INCLUDE_DIRS}\"")