diff options
-rw-r--r-- | CMakeLists.txt | 53 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_SystemWin32.cpp | 5 | ||||
-rw-r--r-- | intern/guardedalloc/MEM_sys_types.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_armature.h | 2 | ||||
-rw-r--r-- | source/blender/blenlib/BLI_winstuff.h | 2 | ||||
-rw-r--r-- | source/blender/blenlib/intern/fileops.c | 2 | ||||
-rw-r--r-- | source/blender/blenloader/BLO_sys_types.h | 2 | ||||
-rw-r--r-- | source/creator/CMakeLists.txt | 26 | ||||
-rw-r--r-- | source/gameengine/Expressions/KX_HashedPtr.cpp | 2 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_GameObject.cpp | 2 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_IPO_SGController.cpp | 2 |
11 files changed, 72 insertions, 28 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 1595e78ea4c..b5f7d171890 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -233,6 +233,8 @@ if(UNIX AND NOT APPLE) option(WITH_INSTALL_PORTABLE "Install redistributeable runtime, otherwise install into CMAKE_INSTALL_PREFIX" ON) endif() option(WITH_PYTHON_INSTALL "Copy system python into the blender install folder" ON) +option(WITH_MINGW64 "Use the 64-bit version of MinGW" OFF) +mark_as_advanced(WITH_MINGW64) # Cycles option(WITH_CYCLES "Enable cycles Render Engine" ON) @@ -370,6 +372,10 @@ if(MINGW) "because it is currently unsupported, remove this " "line if youre a developer who wants to add support.") endif() + + if((WITH_MINGW64) AND (WITH_IMAGE_OPENEXR OR WITH_CYCLES OR WITH_OPENCOLLADA OR WITH_LIBMV OR WITH_CODEC_FFMPEG)) + message(FATAL_ERROR "MINGW64 still doesn't support: WITH_CYCLES/WITH_IMAGE_OPENEXR/WITH_OPENCOLLADA/WITH_LIBMV/WITH_CODEC_FFMPEG") + endif() endif() TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG) @@ -737,6 +743,12 @@ elseif(WIN32) if(CMAKE_COMPILER_IS_GNUCC) set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32) + + # Setup 64bit and 64bit windows systems + if(WITH_MINGW64) + message("Set 64 bit compiler for MinGW.") + set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64) + endif() else() set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/windows) @@ -995,12 +1007,19 @@ elseif(WIN32) set(PLATFORM_LINKFLAGS_DEBUG "/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libc.lib") elseif(CMAKE_COMPILER_IS_GNUCC) - # keep GCC specific stuff here - set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32) - + # keep GCC specific stuff here set(PLATFORM_LINKLIBS "-lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi") set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing") + if(WITH_MINGW64) + #Yes, the point for MinGW64 is moar optimization by default :) + set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -mmmx -msse -msse2 -O3") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive") + set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} -lsetupapi -lpthread") + + add_definitions(-DFREE_WINDOWS64 -DMS_WIN64) + endif() + add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE) @@ -1017,7 +1036,11 @@ elseif(WIN32) set(PNG_INCLUDE_DIR "${PNG}/include") set(PNG_LIBPATH ${PNG}/lib) # not cmake defined - set(JPEG_LIBRARIES libjpeg) + if(WITH_MINGW64) + set(JPEG_LIBRARIES jpeg) + else() + set(JPEG_LIBRARIES libjpeg) + endif() set(PNG_LIBRARIES png) set(ZLIB ${LIBDIR}/zlib) @@ -1025,11 +1048,14 @@ elseif(WIN32) set(ZLIB_LIBPATH ${ZLIB}/lib) set(ZLIB_LIBRARIES z) - set(PTHREADS ${LIBDIR}/pthreads) - set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include) - set(PTHREADS_LIBPATH ${PTHREADS}/lib) - set(PTHREADS_LIBRARIES pthreadGC2) - + #comes with own pthread library + if(NOT WITH_MINGW64) + set(PTHREADS ${LIBDIR}/pthreads) + set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include) + set(PTHREADS_LIBPATH ${PTHREADS}/lib) + set(PTHREADS_LIBRARIES pthreadGC2) + endif() + set(FREETYPE ${LIBDIR}/freetype) set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2) set(FREETYPE_LIBPATH ${FREETYPE}/lib) @@ -1101,8 +1127,13 @@ elseif(WIN32) if(WITH_BOOST) set(BOOST ${LIBDIR}/boost) set(BOOST_INCLUDE_DIR ${BOOST}/include) - set(BOOST_POSTFIX "mgw46-mt-s-1_47") - set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_47") + if(WITH_MINGW64) + set(BOOST_POSTFIX "mgw47-mt-s-1_49") + set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49") + else() + set(BOOST_POSTFIX "mgw46-mt-s-1_47") + set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_47") + endif() set(BOOST_LIBRARIES optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX} boost_regex-${BOOST_POSTFIX} boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX} diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp index e6ac48fa6c8..2d8cf13ac4f 100644 --- a/intern/ghost/intern/GHOST_SystemWin32.cpp +++ b/intern/ghost/intern/GHOST_SystemWin32.cpp @@ -815,9 +815,10 @@ bool GHOST_SystemWin32::processNDOF(RAWINPUT const& raw) // send motion. Mark as 'sent' so motion will always get dispatched. eventSent = true; -#ifdef _MSC_VER +#if defined(_MSC_VER) || defined(FREE_WINDOWS64) // using Microsoft compiler & header files - // they invented the RawInput API, so this version is (probably) correct + // they invented the RawInput API, so this version is (probably) correct. + // MinGW64 also works fine with this BYTE const* data = raw.data.hid.bRawData; // struct RAWHID { // DWORD dwSizeHid; diff --git a/intern/guardedalloc/MEM_sys_types.h b/intern/guardedalloc/MEM_sys_types.h index b7e17154df0..3d43733c569 100644 --- a/intern/guardedalloc/MEM_sys_types.h +++ b/intern/guardedalloc/MEM_sys_types.h @@ -108,8 +108,10 @@ typedef uint64_t u_int64_t; #include <inttypes.h> #elif defined(FREE_WINDOWS) +#ifndef FREE_WINDOWS64 /* define htoln here, there must be a syntax error in winsock2.h in MinGW */ unsigned long __attribute__((__stdcall__)) htonl(unsigned long); +#endif #include <stdint.h> #else diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h index 1334528c035..dfe3fde17eb 100644 --- a/source/blender/blenkernel/BKE_armature.h +++ b/source/blender/blenkernel/BKE_armature.h @@ -89,7 +89,7 @@ int bone_autoside_name (char name[64], int strip_number, short axis, float head, struct Bone *get_named_bone (struct bArmature *arm, const char *name); -float distfactor_to_bone(const float vec[3], const float b1[3], const float b2[3], float rad1, float rad2, float rdist); +float distfactor_to_bone(const float vec[3], const float b1[3], const float b2[3], float r1, float r2, float rdist); void where_is_armature (struct bArmature *arm); void where_is_armature_bone(struct Bone *bone, struct Bone *prevbone); diff --git a/source/blender/blenlib/BLI_winstuff.h b/source/blender/blenlib/BLI_winstuff.h index 33ca7d235fa..a0ab88e8baf 100644 --- a/source/blender/blenlib/BLI_winstuff.h +++ b/source/blender/blenlib/BLI_winstuff.h @@ -113,7 +113,9 @@ typedef unsigned int mode_t; /* python uses HAVE_SSIZE_T */ # ifndef HAVE_SSIZE_T # define HAVE_SSIZE_T 1 +# ifndef FREE_WINDOWS64 typedef long ssize_t; +# endif # endif #endif diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 5bbfd596ba7..4b5ea44e97c 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -209,7 +209,7 @@ FILE *BLI_fopen(const char *filename, const char *mode) return ufopen(filename, mode); } -gzFile BLI_gzopen(const char *filename, const char *mode) +void *BLI_gzopen(const char *filename, const char *mode) { gzFile gzfile; diff --git a/source/blender/blenloader/BLO_sys_types.h b/source/blender/blenloader/BLO_sys_types.h index 7dbd4df1056..41e33eb2a05 100644 --- a/source/blender/blenloader/BLO_sys_types.h +++ b/source/blender/blenloader/BLO_sys_types.h @@ -100,8 +100,10 @@ typedef uint64_t u_int64_t; #include <inttypes.h> #elif defined(FREE_WINDOWS) +#ifndef FREE_WINDOWS64 /* define htoln here, there must be a syntax error in winsock2.h in MinGW */ unsigned long __attribute__((__stdcall__)) htonl(unsigned long); +#endif #include <stdint.h> #else diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 83804ab1a7f..3e1b7772d17 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -448,7 +448,7 @@ elseif(WIN32) DESTINATION ${TARGETDIR} ) - if(WITH_INTERNATIONAL) + if(WITH_INTERNATIONAL AND (NOT WITH_MINGW64)) install( FILES ${LIBDIR}/gettext/lib/gnu_gettext.dll DESTINATION ${TARGETDIR} @@ -523,11 +523,14 @@ elseif(WIN32) DESTINATION ${TARGETDIR} ) else() - install( - FILES - ${LIBDIR}/zlib/lib/zlib.dll - DESTINATION ${TARGETDIR} - ) + #not needed since we link statically, maybe also unneeded for MinGW? + if(NOT WITH_MINGW64) + install( + FILES + ${LIBDIR}/zlib/lib/zlib.dll + DESTINATION ${TARGETDIR} + ) + endif() endif() if(MSVC) @@ -536,10 +539,13 @@ elseif(WIN32) DESTINATION ${TARGETDIR} ) else() - install( - FILES ${LIBDIR}/pthreads/lib/pthreadGC2.dll - DESTINATION ${TARGETDIR} - ) + #MinGW64 comes with own version. For portable builds it will probaly have to be copied to work + if(NOT WITH_MINGW64) + install( + FILES ${LIBDIR}/pthreads/lib/pthreadGC2.dll + DESTINATION ${TARGETDIR} + ) + endif() endif() if(WITH_CODEC_FFMPEG) diff --git a/source/gameengine/Expressions/KX_HashedPtr.cpp b/source/gameengine/Expressions/KX_HashedPtr.cpp index 988b78b8810..51550d52636 100644 --- a/source/gameengine/Expressions/KX_HashedPtr.cpp +++ b/source/gameengine/Expressions/KX_HashedPtr.cpp @@ -34,7 +34,7 @@ unsigned int KX_Hash(void * inDWord) { -#if defined(_WIN64) +#if defined(_WIN64) && !defined(FREE_WINDOWS64) unsigned __int64 key = (unsigned __int64)inDWord; #else unsigned long key = (unsigned long)inDWord; diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp index 74f028849cc..c5145ef2171 100644 --- a/source/gameengine/Ketsji/KX_GameObject.cpp +++ b/source/gameengine/Ketsji/KX_GameObject.cpp @@ -31,7 +31,7 @@ */ -#if defined(_WIN64) +#if defined(_WIN64) && !defined(FREE_WINDOWS64) typedef unsigned __int64 uint_ptr; #else typedef unsigned long uint_ptr; diff --git a/source/gameengine/Ketsji/KX_IPO_SGController.cpp b/source/gameengine/Ketsji/KX_IPO_SGController.cpp index 728d0fb8561..950e3c88a9e 100644 --- a/source/gameengine/Ketsji/KX_IPO_SGController.cpp +++ b/source/gameengine/Ketsji/KX_IPO_SGController.cpp @@ -31,7 +31,7 @@ */ -#if defined(_WIN64) +#if defined(_WIN64) && !defined(FREE_WINDOWS64) typedef unsigned __int64 uint_ptr; #else typedef unsigned long uint_ptr; |