Explorar el Código

Initial fixes for compiling as 64bit (MSVC.)

Lasse Öörni hace 12 años
padre
commit
9e3282aeea

+ 35 - 22
CMakeLists.txt

@@ -11,19 +11,13 @@ if (COMMAND cmake_policy)
     cmake_policy (SET CMP0003 NEW)
     cmake_policy (SET CMP0003 NEW)
 endif ()
 endif ()
 
 
-if (IOS)
-    # IOS-specific setup
-    add_definitions (-DIOS)
-    enable_language (ASM)
-    set (CMAKE_OSX_ARCHITECTURES $(ARCHS_STANDARD_32_BIT))
-    set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos;-iphonesimulator")
-    set (MACOSX_BUNDLE_GUI_IDENTIFIER "com.googlecode.urho3d")
-    set (CMAKE_OSX_SYSROOT "iphoneos")	# Set to "Latest iOS"
-elseif (CMAKE_GENERATOR STREQUAL "Xcode")
-    # MacOSX-Xcode-specific setup
-    set (CMAKE_OSX_ARCHITECTURES $(ARCHS_STANDARD_32_BIT))
-    set (CMAKE_OSX_SYSROOT "")		# Set to "Current OS X"
-    #set (CMAKE_OSX_SYSROOT "macosx")	# Set to "Latest OS X"
+# Enable 64-bit build. Disabled by default. On Visual Studio, depends on the generator used
+if (NOT MSVC)
+    # set (ENABLE_64BIT 1)
+else ()
+    if (CMAKE_GENERATOR MATCHES "Win64")
+        set (ENABLE_64BIT 1)
+    endif ()
 endif ()
 endif ()
 
 
 # Enable SSE instruction set. Requires Pentium III or Athlon XP processor at minimum.
 # Enable SSE instruction set. Requires Pentium III or Athlon XP processor at minimum.
@@ -59,16 +53,28 @@ if (NOT WIN32)
     add_definitions (-DUNIX)
     add_definitions (-DUNIX)
 endif ()
 endif ()
 
 
-# Set static for GLEW.
-if (NOT IOS)
-    if (USE_OPENGL)
-        add_definitions(-DGLEW_STATIC)
-        add_definitions(-DGLEW_NO_GLU)
+# Platform and compiler specific options
+if (IOS)
+    # IOS-specific setup
+    add_definitions (-DIOS)
+    enable_language (ASM)
+    set (CMAKE_OSX_ARCHITECTURES $(ARCHS_STANDARD_32_BIT))
+    set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos;-iphonesimulator")
+    set (MACOSX_BUNDLE_GUI_IDENTIFIER "com.googlecode.urho3d")
+    set (CMAKE_OSX_SYSROOT "iphoneos")	# Set to "Latest iOS"
+elseif (CMAKE_GENERATOR STREQUAL "Xcode")
+    # MacOSX-Xcode-specific setup
+    if (NOT ENABLE_64BIT)
+        set (CMAKE_OSX_ARCHITECTURES $(ARCHS_STANDARD_32_BIT))
     endif ()
     endif ()
+    set (CMAKE_OSX_SYSROOT "")		# Set to "Current OS X"
+    #set (CMAKE_OSX_SYSROOT "macosx")	# Set to "Latest OS X"
 endif ()
 endif ()
-
-# Compiler-specific options
 if (MSVC)
 if (MSVC)
+    # Visual Studio-specific setup
+    if (ENABLE_64BIT)
+        enable_language (ASM_MASM)
+    endif ()
     add_definitions (-D_CRT_SECURE_NO_WARNINGS)
     add_definitions (-D_CRT_SECURE_NO_WARNINGS)
     set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
     set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
     set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} /MT /fp:fast /Zi /GS-")
     set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} /MT /fp:fast /Zi /GS-")
@@ -83,9 +89,14 @@ if (MSVC)
     set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /DEBUG")
     set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /DEBUG")
     set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF")
     set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF")
 else ()
 else ()
+    # GCC-specific setup
     if (NOT IOS)
     if (NOT IOS)
-        set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32 -O2 -ffast-math")
-        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -m32 -O2 -ffast-math")
+        set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -ffast-math")
+        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -O2 -ffast-math")
+        if (NOT ENABLE_64BIT)
+            set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
+            set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
+        endif ()
         if (ENABLE_SSE)
         if (ENABLE_SSE)
             set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse")
             set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse")
             set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse")
             set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse")
@@ -179,6 +190,8 @@ add_subdirectory (Urho3D)
 if (NOT IOS)
 if (NOT IOS)
     if (USE_OPENGL)
     if (USE_OPENGL)
         add_subdirectory (ThirdParty/GLEW)
         add_subdirectory (ThirdParty/GLEW)
+        add_definitions(-DGLEW_STATIC)
+        add_definitions(-DGLEW_NO_GLU)
     endif ()
     endif ()
     add_subdirectory (ThirdParty/Assimp)
     add_subdirectory (ThirdParty/Assimp)
     add_subdirectory (ThirdParty/LibCpuId)
     add_subdirectory (ThirdParty/LibCpuId)

+ 20 - 0
Engine/Container/Str.cpp

@@ -62,6 +62,16 @@ String::String(short value) :
     *this = tempBuffer;
     *this = tempBuffer;
 }
 }
 
 
+String::String(long long value) :
+    length_(0),
+    capacity_(0),
+    buffer_(&endZero)
+{
+    char tempBuffer[CONVERSION_BUFFER_LENGTH];
+    sprintf(tempBuffer, "%lld", value);
+    *this = tempBuffer;
+}
+
 String::String(unsigned value) :
 String::String(unsigned value) :
     length_(0),
     length_(0),
     capacity_(0),
     capacity_(0),
@@ -82,6 +92,16 @@ String::String(unsigned short value) :
     *this = tempBuffer;
     *this = tempBuffer;
 }
 }
 
 
+String::String(unsigned long long value) :
+    length_(0),
+    capacity_(0),
+    buffer_(&endZero)
+{
+    char tempBuffer[CONVERSION_BUFFER_LENGTH];
+    sprintf(tempBuffer, "%llu", value);
+    *this = tempBuffer;
+}
+
 String::String(float value) :
 String::String(float value) :
     length_(0),
     length_(0),
     capacity_(0),
     capacity_(0),

+ 4 - 0
Engine/Container/Str.h

@@ -112,10 +112,14 @@ public:
     explicit String(int value);
     explicit String(int value);
     /// Construct from a short integer.
     /// Construct from a short integer.
     explicit String(short value);
     explicit String(short value);
+    /// Construct from a long integer.
+    explicit String(long long value);
     /// Construct from an unsigned integer.
     /// Construct from an unsigned integer.
     explicit String(unsigned value);
     explicit String(unsigned value);
     /// Construct from an unsigned short integer.
     /// Construct from an unsigned short integer.
     explicit String(unsigned short value);
     explicit String(unsigned short value);
+    /// Construct from an unsigned long integer.
+    explicit String(unsigned long long value);
     /// Construct from a float.
     /// Construct from a float.
     explicit String(float value);
     explicit String(float value);
     /// Construct from a double.
     /// Construct from a double.

+ 1 - 1
Engine/Core/Attribute.h

@@ -71,7 +71,7 @@ struct AttributeInfo
     }
     }
     
     
     /// Construct offset attribute.
     /// Construct offset attribute.
-    AttributeInfo(VariantType type, const char* name, unsigned offset, const Variant& defaultValue, unsigned mode) :
+    AttributeInfo(VariantType type, const char* name, size_t offset, const Variant& defaultValue, unsigned mode) :
         type_(type),
         type_(type),
         name_(name),
         name_(name),
         offset_(offset),
         offset_(offset),

+ 1 - 1
Engine/Core/ProcessUtils.cpp

@@ -105,7 +105,7 @@ void GetCPUData(struct cpu_id_t* data)
 
 
 void InitFPU()
 void InitFPU()
 {
 {
-    #if !defined(ANDROID) && !defined(IOS)
+    #if !defined(ANDROID) && !defined(IOS) && !defined(__x86_64__) && !defined(_M_AMD64)
     // Make sure FPU is in round-to-nearest, single precision mode
     // Make sure FPU is in round-to-nearest, single precision mode
     // This ensures Direct3D and OpenGL behave similarly, and all threads behave similarly
     // This ensures Direct3D and OpenGL behave similarly, and all threads behave similarly
     #ifdef _MSC_VER
     #ifdef _MSC_VER

+ 3 - 2
Engine/Graphics/Light.cpp

@@ -48,6 +48,7 @@ static const float DEFAULT_SHADOWFADESTART = 0.8f;
 static const float DEFAULT_SHADOWQUANTIZE = 0.5f;
 static const float DEFAULT_SHADOWQUANTIZE = 0.5f;
 static const float DEFAULT_SHADOWMINVIEW = 3.0f;
 static const float DEFAULT_SHADOWMINVIEW = 3.0f;
 static const float DEFAULT_SHADOWNEARFARRATIO = 0.002f;
 static const float DEFAULT_SHADOWNEARFARRATIO = 0.002f;
+static const float DEFAULT_SHADOWSPLIT = 1000.0f;
 
 
 static const char* typeNames[] =
 static const char* typeNames[] =
 {
 {
@@ -87,7 +88,7 @@ Light::Light(Context* context) :
     Drawable(context, DRAWABLE_LIGHT),
     Drawable(context, DRAWABLE_LIGHT),
     lightType_(DEFAULT_LIGHTTYPE),
     lightType_(DEFAULT_LIGHTTYPE),
     shadowBias_(BiasParameters(DEFAULT_CONSTANTBIAS, DEFAULT_SLOPESCALEDBIAS)),
     shadowBias_(BiasParameters(DEFAULT_CONSTANTBIAS, DEFAULT_SLOPESCALEDBIAS)),
-    shadowCascade_(CascadeParameters(M_LARGE_VALUE, 0.0f, 0.0f, 0.0f, DEFAULT_SHADOWFADESTART)),
+    shadowCascade_(CascadeParameters(DEFAULT_SHADOWSPLIT, 0.0f, 0.0f, 0.0f, DEFAULT_SHADOWFADESTART)),
     shadowFocus_(FocusParameters(true, true, true, DEFAULT_SHADOWQUANTIZE, DEFAULT_SHADOWMINVIEW)),
     shadowFocus_(FocusParameters(true, true, true, DEFAULT_SHADOWQUANTIZE, DEFAULT_SHADOWMINVIEW)),
     lightQueue_(0),
     lightQueue_(0),
     specularIntensity_(DEFAULT_SPECULARINTENSITY),
     specularIntensity_(DEFAULT_SPECULARINTENSITY),
@@ -132,7 +133,7 @@ void Light::RegisterObject(Context* context)
     ATTRIBUTE(Light, VAR_BOOL, "Focus To Scene", shadowFocus_.focus_, true, AM_DEFAULT);
     ATTRIBUTE(Light, VAR_BOOL, "Focus To Scene", shadowFocus_.focus_, true, AM_DEFAULT);
     ATTRIBUTE(Light, VAR_BOOL, "Non-uniform View", shadowFocus_.nonUniform_, true, AM_DEFAULT);
     ATTRIBUTE(Light, VAR_BOOL, "Non-uniform View", shadowFocus_.nonUniform_, true, AM_DEFAULT);
     ATTRIBUTE(Light, VAR_BOOL, "Auto-Reduce Size", shadowFocus_.autoSize_, true, AM_DEFAULT);
     ATTRIBUTE(Light, VAR_BOOL, "Auto-Reduce Size", shadowFocus_.autoSize_, true, AM_DEFAULT);
-    ATTRIBUTE(Light, VAR_VECTOR4, "CSM Splits", shadowCascade_.splits_, Vector4(1000.0f, 0.0f, 0.0f, 0.0f), AM_DEFAULT);
+    ATTRIBUTE(Light, VAR_VECTOR4, "CSM Splits", shadowCascade_.splits_, Vector4(DEFAULT_SHADOWSPLIT, 0.0f, 0.0f, 0.0f), AM_DEFAULT);
     ATTRIBUTE(Light, VAR_FLOAT, "CSM Fade Start", shadowCascade_.fadeStart_, DEFAULT_SHADOWFADESTART, AM_DEFAULT);
     ATTRIBUTE(Light, VAR_FLOAT, "CSM Fade Start", shadowCascade_.fadeStart_, DEFAULT_SHADOWFADESTART, AM_DEFAULT);
     ATTRIBUTE(Light, VAR_FLOAT, "CSM Bias Auto Adjust", shadowCascade_.biasAutoAdjust_, DEFAULT_BIASAUTOADJUST, AM_DEFAULT);
     ATTRIBUTE(Light, VAR_FLOAT, "CSM Bias Auto Adjust", shadowCascade_.biasAutoAdjust_, DEFAULT_BIASAUTOADJUST, AM_DEFAULT);
     ATTRIBUTE(Light, VAR_FLOAT, "View Size Quantize", shadowFocus_.quantize_, DEFAULT_SHADOWQUANTIZE, AM_DEFAULT);
     ATTRIBUTE(Light, VAR_FLOAT, "View Size Quantize", shadowFocus_.quantize_, DEFAULT_SHADOWQUANTIZE, AM_DEFAULT);

+ 1 - 1
Engine/Resource/Image.cpp

@@ -142,7 +142,7 @@ struct DDSurfaceDesc2
     };
     };
     unsigned dwAlphaBitDepth_;
     unsigned dwAlphaBitDepth_;
     unsigned dwReserved_;
     unsigned dwReserved_;
-    void* lpSurface_;
+    unsigned lpSurface_; // Do not define as a void pointer, as it is 8 bytes in a 64bit build
     union
     union
     {
     {
         DDColorKey ddckCKDestOverlay_;
         DDColorKey ddckCKDestOverlay_;

+ 4 - 0
ThirdParty/AngelScript/CMakeLists.txt

@@ -13,6 +13,10 @@ if (IOS)
     set (ASM_FILES source/as_callfunc_arm_xcode.S)
     set (ASM_FILES source/as_callfunc_arm_xcode.S)
 endif ()
 endif ()
 
 
+if (MSVC AND ENABLE_64BIT)
+    set (ASM_FILES source/as_callfunc_x64_msvc_asm.asm)
+endif ()
+
 set (SOURCE_FILES ${CPP_FILES} ${ASM_FILES} ${H_FILES})
 set (SOURCE_FILES ${CPP_FILES} ${ASM_FILES} ${H_FILES})
 
 
 # Define dependency libs
 # Define dependency libs

+ 5 - 1
ThirdParty/LibCpuId/CMakeLists.txt

@@ -10,7 +10,11 @@ file (GLOB H_FILES
     libcpuid/*.h
     libcpuid/*.h
 )
 )
 
 
-set (SOURCE_FILES ${C_FILES} ${H_FILES})
+if (MSVC AND ENABLE_64BIT)
+    set (ASM_FILES libcpuid/masm-x64.asm)
+endif ()
+
+set (SOURCE_FILES ${C_FILES} ${H_FILES} ${ASM_FILES})
 
 
 # Define dependency libs
 # Define dependency libs
 set (INCLUDE_DIRS_ONLY libcpuid)
 set (INCLUDE_DIRS_ONLY libcpuid)