|
|
@@ -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
|