Browse Source

Refactor LuaJIT build scripts - no more generated CMakeLists.txt.

Yao Wei Tjong 姚伟忠 11 years ago
parent
commit
8e6fe0da14

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

@@ -328,18 +328,17 @@ else ()
             set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math")
             set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math")
             if (URHO3D_64BIT)
-                set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64")
-                set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
-                set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m64")
+                set (DASH_MBIT -m64)    # This variable is intentionally not defined on Android and RPI platform
             else ()
-                set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
-                set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
-                set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32")
+                set (DASH_MBIT -m32)
                 if (URHO3D_SSE)
                     set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse")
                     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse")
                 endif ()
             endif ()
+            set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DASH_MBIT}")
+            set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DASH_MBIT}")
+            set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${DASH_MBIT}")
         endif ()
         # MinGW-specific setup
         if (MINGW)

+ 1 - 1
Source/Engine/LuaScript/CMakeLists.txt

@@ -38,7 +38,7 @@ if (CMAKE_CROSSCOMPILING OR IOS)
     endif ()
     ExternalProject_Add(tolua++
         SOURCE_DIR ${CMAKE_SOURCE_DIR}/Source/ThirdParty/toluapp/src/bin
-        CMAKE_ARGS -DJIT=${JIT} -DDEST_RUNTIME_DIR=${CMAKE_BINARY_DIR}/Bin/tool -DURHO3D_64BIT=${URHO3D_64BIT} -DBAKED_CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} ${OSX_HOST}
+        CMAKE_ARGS -DJIT=${JIT} -DDEST_RUNTIME_DIR=${CMAKE_BINARY_DIR}/Bin/tool -DBAKED_CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} ${OSX_HOST}
     )
 else ()
     # Otherwise, build it internally as per normal

+ 173 - 24
Source/ThirdParty/LuaJIT/CMakeLists.txt

@@ -21,7 +21,7 @@
 #
 
 # Based on src/Makefile from http://luajit.org
-# The cross-compiling logic is ported to CMake as verbatim as possible although currently Urho3D does not support all of them
+# The cross-compiling logic is ported to CMake as faithful as possible although currently Urho3D does not support all target archs supported by LuaJIT
 
 # Makefile: Compiler options
 if (NOT MSVC)
@@ -139,41 +139,194 @@ else ()
     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|__SSE__" OUTPUT_VARIABLE TARGET_TESTARCH ERROR_QUIET)
+            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)
     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})")
+        else ()
+            set (${output_var} 0 CACHE INTERNAL "LUAJIT INTERNAL - ${output_var}")
+            message (STATUS "Finding value for LuaJIT:${output_var} - not found")
+        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)
+    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_SYST 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)
+    endif ()
+endif ()
+
+# Makefile: Files and pathnames
+if (NOT BAKED_CMAKE_SOURCE_DIR)
+    set (BAKED_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR})
+endif ()
+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)
+    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)
+    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_PPC64 (1)" ARCH_PPC64)
+    if (ARCH_PPC64)
+        set (DASM_AFLAGS ${DASM_AFLAGS} -D GPR64)
+    endif ()
+    if (TARGET_SYS STREQUAL PS3)
+        set (DASM_AFLAGS ${DASM_AFLAGS} -D PPE -D TOC)
+    endif ()
+endif ()
+
+set (DASM_FLAGS ${DASM_XFLAGS} ${DASM_AFLAGS})
+
 # Makefile: Build mode handling
 # Urho3D only builds static LuaJIT library
 
 # Makefile: Make targets
-set (WARNING "# This is a generated file. DO NOT EDIT!")
-configure_file (CMakeLists.txt-minilua.in ${CMAKE_CURRENT_BINARY_DIR}/generated/minilua/CMakeLists.txt @ONLY)
-configure_file (CMakeLists.txt-buildvm.in ${CMAKE_CURRENT_BINARY_DIR}/generated/buildvm/CMakeLists.txt @ONLY)
 # The host tool must be built natively
 if (CMAKE_CROSSCOMPILING OR IOS)
-    # Store the target architecture information for later use when cross-compiling 'buildvm' host tool
-    file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/generated/buildvm/TARGET_TESTARCH.txt ${TARGET_TESTARCH})
-
-    if (IOS)
-        set (TARGET_SYS iOS)
-    elseif (ANDROID OR RPI)
-        set (TARGET_SYS Linux)
-    elseif (MINGW)
-        set (TARGET_SYS Windows)
-    endif ()
-
+    # Escape the variables
+    foreach (ESCAPED_VAR HOST_XCFLAGS TARGET_ARCH DASM_FLAGS DASM_ARCH)
+        string (REGEX REPLACE -D +D ${ESCAPED_VAR} "${${ESCAPED_VAR}}")
+        string (REGEX REPLACE ";" , ${ESCAPED_VAR} "${${ESCAPED_VAR}}")
+    endforeach ()
     # When cross-compiling, build the host tool as external project
     include (ExternalProject)
     ExternalProject_Add(buildvm
-        SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/buildvm
-        CMAKE_ARGS -DTARGET_SYS=${TARGET_SYS} -DDEST_RUNTIME_DIR=${CMAKE_BINARY_DIR}/Bin/tool -DURHO3D_64BIT=${URHO3D_64BIT}
+        SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/host
+        CMAKE_ARGS -DURHO3D_64BIT=${URHO3D_64BIT} -DDEST_RUNTIME_DIR=${CMAKE_BINARY_DIR}/Bin/tool -DBAKED_CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} -DHOST_XCFLAGS=${HOST_XCFLAGS} -DTARGET_ARCH=${TARGET_ARCH} -DDASM_FLAGS=${DASM_FLAGS} -DDASM_ARCH=${DASM_ARCH}
     )
 else ()
     # Otherwise, build it internally as per normal
-    add_subdirectory (${CMAKE_CURRENT_BINARY_DIR}/generated/buildvm generated/buildvm)
+    add_subdirectory (src/host)
 endif ()
 
 # Add definitions specific for target C Compiler 
@@ -206,11 +359,7 @@ if (WIN32)
 else ()
     set (LJVM_BOUT lj_vm.s)
     enable_language (ASM)
-    if (TARGET_LJARCH STREQUAL x64)
-        set (CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -m64")
-    else ()
-        set (CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -m32")
-    endif ()
+    set (CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${DASH_MBIT}")
     if (APPLE)
         set (LJVM_MODE machasm)
     else ()

+ 0 - 189
Source/ThirdParty/LuaJIT/DetectTargetArchitecture.cmake

@@ -1,189 +0,0 @@
-#
-# Copyright (c) 2008-2013 the Urho3D project.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-
-# 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}")     # Search input as a string
-        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})")
-        else ()
-            set (${output_var} 0 CACHE INTERNAL "LUAJIT INTERNAL - ${output_var}")
-            message (STATUS "Finding value for LuaJIT:${output_var} - not found")
-        endif ()
-    endif ()
-endmacro ()
-
-# Makefile: Architecture detection
-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)
-    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 (WIN32)
-    set (HOST_SYS Windows)
-else ()
-    execute_process (COMMAND uname -s OUTPUT_VARIABLE HOST_SYS ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
-endif ()
-if (TARGET_SYS)
-    # Makefile: ifneq ($(HOST_SYS),$(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)
-    endif ()
-else ()
-    set (TARGET_SYS ${HOST_SYS})
-endif ()
-
-# Makefile: Files and pathnames
-set (DASM_DIR ${BAKED_CMAKE_SOURCE_DIR}/Source/ThirdParty/LuaJIT/dynasm)
-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 ()
-if (TARGET_SYS)
-    if (MSVC)
-        message (FATAL_ERROR "MSVC is not able to cross-compile 'buildvm' target at this moment, please use GCC or LLVM/Clang instead.")
-    else ()
-        string (REGEX REPLACE "-m(32|64) *" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
-        set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m${ARCH_BITS}")
-    endif ()
-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)
-if (ARCH_VERSION)
-    set (DASM_AFLAGS ${DASM_AFLAGS} -D VER=${ARCH_VERSION})
-else ()
-    set (DASM_AFLAGS ${DASM_AFLAGS} -D VER=)
-endif ()
-
-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)
-    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)
-    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_PPC64 (1)" ARCH_PPC64)
-    if (ARCH_PPC64)
-        set (DASM_AFLAGS ${DASM_AFLAGS} -D GPR64)
-    endif ()
-    if (TARGET_SYS STREQUAL PS3)
-        set (DASM_AFLAGS ${DASM_AFLAGS} -D PPE -D TOC)
-    endif ()
-endif ()
-
-set (DASM_FLAGS ${DASM_XFLAGS} ${DASM_AFLAGS})
-set (DASM_DASC ${BAKED_CMAKE_SOURCE_DIR}/Source/ThirdParty/LuaJIT/src/vm_${DASM_ARCH}.dasc)

+ 14 - 17
Source/ThirdParty/LuaJIT/CMakeLists.txt-buildvm.in → Source/ThirdParty/LuaJIT/src/host/CMakeLists.txt

@@ -20,12 +20,10 @@
 # THE SOFTWARE.
 #
 
-@WARNING@
-
 if (CMAKE_PROJECT_NAME STREQUAL ExternalProject-tolua++)
     # Do not install the buildvm host tool from tolua++ external project because it is built for targetting host system itself
-    # We only want to keep the buildvm host tool which targets a cross-compiling target (the one built from internal LuaJIT CMake-target) 
-    set (DEST_RUNTIME_DIR "")
+    # 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)
     # Set project name
     project (ExternalProject-buildvm)
@@ -48,33 +46,32 @@ elseif (NOT CMAKE_PROJECT_NAME STREQUAL Urho3D)
     endif ()
 
     # Set CMake modules search path
-    set (CMAKE_MODULE_PATH @CMAKE_SOURCE_DIR@/CMake/Modules)
+    set (CMAKE_MODULE_PATH ${BAKED_CMAKE_SOURCE_DIR}/CMake/Modules)
 
     # Include Urho3D Cmake common module
     include (Urho3D-CMake-common)
+
+    # Unescape the variables
+    foreach (ESCAPED_VAR HOST_XCFLAGS TARGET_ARCH DASM_FLAGS DASM_ARCH)
+        string (REGEX REPLACE \\+D -D ${ESCAPED_VAR} ${${ESCAPED_VAR}})
+        string (REGEX REPLACE , ";" ${ESCAPED_VAR} ${${ESCAPED_VAR}})
+    endforeach ()
 endif ()
 
 # Add dependency target
-add_subdirectory (../minilua ../minilua)
+add_subdirectory (minilua)
 
 # Define target name
 set (TARGET_NAME buildvm)
 
-# Read the target architecture information
-if (NOT TARGET_TESTARCH)
-    file (READ TARGET_TESTARCH.txt TARGET_TESTARCH)
-endif ()
-
 # Add definitions specific for host C compiler
-if (NOT BAKED_CMAKE_SOURCE_DIR)
-    set (BAKED_CMAKE_SOURCE_DIR @CMAKE_SOURCE_DIR@)
-endif ()
-include (@CMAKE_CURRENT_SOURCE_DIR@/DetectTargetArchitecture.cmake)
 add_definitions (${HOST_XCFLAGS} ${TARGET_ARCH})
 
 # Define generated source files
 set (GEN_ARCH_H ${CMAKE_CURRENT_BINARY_DIR}/buildvm_arch.h)
+set (DASM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../dynasm)
 set (DASM ${DASM_DIR}/dynasm.lua)
+set (DASM_DASC ${CMAKE_CURRENT_SOURCE_DIR}/../vm_${DASM_ARCH}.dasc)
 file (GLOB DASM_LUA ${DASM_DIR}/*.lua)
 add_custom_command (OUTPUT ${GEN_ARCH_H}
     COMMAND ${CMAKE_BINARY_DIR}/Bin/tool/minilua ${DASM} ${DASM_FLAGS} -o ${GEN_ARCH_H} ${DASM_DASC}
@@ -83,11 +80,11 @@ add_custom_command (OUTPUT ${GEN_ARCH_H}
     COMMENT "Generating buildvm arch header file")
 
 # Define source files
-file (GLOB C_FILES @CMAKE_CURRENT_SOURCE_DIR@/src/host/buildvm*.c)
+file (GLOB C_FILES buildvm*.c)
 set (SOURCE_FILES ${C_FILES} ${GEN_ARCH_H})
 
 # Define dependency libs
-set (INCLUDE_DIRS_ONLY ${CMAKE_CURRENT_BINARY_DIR} @CMAKE_CURRENT_SOURCE_DIR@/src)
+set (INCLUDE_DIRS_ONLY ${CMAKE_CURRENT_BINARY_DIR} ..)
 
 # All tools must be natively built and output to Bin/tool subdir to differentiate them from platform-specific binaries in the Bin directory
 set_output_directories (${CMAKE_BINARY_DIR}/Bin/tool RUNTIME PDB)

+ 1 - 3
Source/ThirdParty/LuaJIT/CMakeLists.txt-minilua.in → Source/ThirdParty/LuaJIT/src/host/minilua/CMakeLists.txt

@@ -20,13 +20,11 @@
 # THE SOFTWARE.
 #
 
-@WARNING@
-
 # Define target name
 set (TARGET_NAME minilua)
 
 # Define source files
-set (SOURCE_FILES @CMAKE_CURRENT_SOURCE_DIR@/src/host/minilua.c)
+set (SOURCE_FILES ../minilua.c)
 
 # Define dependency libs
 if (NOT MSVC)

+ 2 - 2
Source/ThirdParty/toluapp/src/bin/CMakeLists.txt

@@ -48,8 +48,8 @@ if (NOT CMAKE_PROJECT_NAME STREQUAL Urho3D)
     include (Urho3D-CMake-common)
 
     # Add dependency targets
-    add_subdirectory (../../../../ThirdParty/Lua${JIT} ../../../../ThirdParty/Lua${JIT})
-    add_subdirectory (../../../../ThirdParty/toluapp/src/lib ../../../../ThirdParty/toluapp/src/lib)
+    add_subdirectory (${BAKED_CMAKE_SOURCE_DIR}/Source/ThirdParty/Lua${JIT} host/Lua${JIT})
+    add_subdirectory (${BAKED_CMAKE_SOURCE_DIR}/Source/ThirdParty/toluapp/src/lib host/toluapp)
 endif ()
 
 # Define target name

+ 2 - 4
Source/Tools/Urho3DPlayer/CMakeLists.txt

@@ -41,10 +41,8 @@ endif ()
 
 # Symlink/copy helper shell scripts or batch files to invoke Urho3DPlayer
 if (NOT IOS AND NOT ANDROID)
-    if (APPLE)
-        # For some reason CMake is late to create this output directory when on Apple
-        file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Bin)
-    endif ()
+    # Ensure the output directory exist before creating the symlinks
+    file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Bin)
     foreach (FILE Editor NinjaSnowWar)
         create_symlink (${CMAKE_SOURCE_DIR}/Bin/${FILE}${SCRIPT_EXT} ${CMAKE_BINARY_DIR}/Bin/${FILE}${SCRIPT_EXT} FALLBACK_TO_COPY)
     endforeach ()