Merge remote-tracking branch 'origin/master' into blender2.8
authorRay Molenkamp <github@lazydodo.com>
Mon, 28 May 2018 20:35:59 +0000 (14:35 -0600)
committerRay Molenkamp <github@lazydodo.com>
Mon, 28 May 2018 20:35:59 +0000 (14:35 -0600)
20 files changed:
CMakeLists.txt
build_files/build_environment/patches/boost.diff
build_files/build_environment/patches/osl.diff
build_files/cmake/platform/platform_win32.cmake
build_files/windows/configure_msbuild.cmd
build_files/windows/configure_ninja.cmd
build_files/windows/parse_arguments.cmd
build_files/windows/reset_variables.cmd
extern/Eigen3/Eigen/src/Core/arch/SSE/PacketMath.h
extern/Eigen3/patches/blender.diff [new file with mode: 0644]
extern/bullet2/patches/blender.patch
extern/bullet2/src/LinearMath/btScalar.h
intern/atomic/intern/atomic_ops_msvc.h
intern/cycles/CMakeLists.txt
intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
source/blender/blenkernel/intern/rigidbody.c
source/blender/blenlib/BLI_utildefines.h
source/blender/bmesh/CMakeLists.txt
source/blender/makesrna/intern/makesrna.c
source/blender/python/intern/stubs.c

index 74e6596..02aa369 100644 (file)
@@ -1548,7 +1548,12 @@ else()
 endif()
 
 # Visual Studio has all standards it supports available by default
-if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "Intel")
+# Clang on windows copies this behavior and does not support these switches
+if(
+       CMAKE_COMPILER_IS_GNUCC OR
+       (CMAKE_C_COMPILER_ID MATCHES "Clang" AND (NOT MSVC)) OR
+       (CMAKE_C_COMPILER_ID MATCHES "Intel")
+)
        # Use C99 + GNU extensions, works with GCC, Clang, ICC
        if(WITH_C11)
                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
index ea3ec03..41b40d7 100644 (file)
 -#     pragma message("Unknown compiler version - please run the configure tests and report the results")
 -#  endif
 -#endif
+--- a/boost/type_traits/has_nothrow_assign.hpp 2015-12-13 05:49:42 -0700
++++ b/boost/type_traits/has_nothrow_assign.hpp 2018-05-27 11:11:02 -0600
+@@ -24,7 +24,7 @@
+ #include <boost/type_traits/remove_reference.hpp>
+ #endif
+ #endif
+-#if defined(__GNUC__) || defined(__SUNPRO_CC)
++#if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__clang__)
+ #include <boost/type_traits/is_const.hpp>
+ #include <boost/type_traits/is_volatile.hpp>
+ #include <boost/type_traits/is_assignable.hpp>
+--- a/boost/type_traits/has_nothrow_constructor.hpp    2015-12-13 05:49:42 -0700
++++ b/boost/type_traits/has_nothrow_constructor.hpp    2018-05-27 11:11:02 -0600
+@@ -17,7 +17,7 @@
+ #if defined(BOOST_MSVC) || defined(BOOST_INTEL)
+ #include <boost/type_traits/has_trivial_constructor.hpp>
+ #endif
+-#if defined(__GNUC__ ) || defined(__SUNPRO_CC)
++#if defined(__GNUC__ ) || defined(__SUNPRO_CC) || defined(__clang__)
+ #include <boost/type_traits/is_default_constructible.hpp>
+ #endif
index fcb5ec4..960a250 100644 (file)
@@ -10,3 +10,29 @@ diff -Naur osl/src/external_osl/src/cmake/flexbison.cmake osl_bak/src/external_o
            MAIN_DEPENDENCY ${flexsrc}
            DEPENDS ${${compiler_headers}}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
+--- a/src/include/OSL/oslconfig.h      2016-10-31 16:48:19 -0600
++++ b/src/include/OSL/oslconfig.h      2018-05-27 11:18:08 -0600
+@@ -44,12 +44,18 @@
+ // same if another packages is compiling against OSL and using these headers
+ // (OSL may be C++11 but the client package may be older, or vice versa --
+ // use these two symbols to differentiate these cases, when important).
+-#if (__cplusplus >= 201402L)
+-#  define OSL_CPLUSPLUS_VERSION  14
+-#elif (__cplusplus >= 201103L)
+-#  define OSL_CPLUSPLUS_VERSION  11
++
++// Force C++03 for MSVC in blender since svn the libraries are build with that
++#if !defined(_MSC_VER)
++      #if (__cplusplus >= 201402L)
++      #  define OSL_CPLUSPLUS_VERSION  14
++      #elif (__cplusplus >= 201103L)
++      #  define OSL_CPLUSPLUS_VERSION  11
++      #else
++      #  define OSL_CPLUSPLUS_VERSION  3 /* presume C++03 */
++      #endif
+ #else
+-#  define OSL_CPLUSPLUS_VERSION  3 /* presume C++03 */
++      #  define OSL_CPLUSPLUS_VERSION  3 /* presume C++03 */
+ #endif
+ // Symbol export defines
index 606e4e5..8980b7e 100644 (file)
@@ -29,7 +29,10 @@ if(NOT MSVC)
        message(FATAL_ERROR "Compiler is unsupported")
 endif()
 
-# Libraries configuration for Windows when compiling with MSVC.
+if(CMAKE_C_COMPILER_ID MATCHES "Clang")
+       set(MSVC_CLANG On)
+       file(TO_CMAKE_PATH $ENV{VCToolsRedistDir} MSVC_REDIST_DIR)
+endif()
 
 set_property(GLOBAL PROPERTY USE_FOLDERS ${WINDOWS_USE_VISUAL_STUDIO_FOLDERS})
 
@@ -121,8 +124,16 @@ include(InstallRequiredSystemLibraries)
 
 remove_cc_flag("/MDd" "/MD")
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /nologo /J /Gd /MP /EHsc")
-set(CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} /nologo /J /Gd /MP")
+if(MSVC_CLANG) # Clangs version of cl doesn't support all flags 
+       if(NOT WITH_CXX11) # C++11 is on by default in clang-cl and can't be turned off, if c++11 is not enabled in blender repress some c++11 related warnings. 
+               set(CXX_WARN_FLAGS "-Wno-inconsistent-missing-override")
+       endif()
+       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_WARN_FLAGS} /nologo /J /Gd /EHsc -Wno-unused-command-line-argument -Wno-microsoft-enum-forward-reference ")
+       set(CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} /nologo /J /Gd -Wno-unused-command-line-argument -Wno-microsoft-enum-forward-reference")
+else()
+       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /nologo /J /Gd /MP /EHsc")
+       set(CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} /nologo /J /Gd /MP")
+endif()
 
 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
index 135b793..95a8882 100644 (file)
@@ -4,6 +4,10 @@ if "%BUILD_ARCH%"=="x64" (
        set MSBUILD_PLATFORM=x64
 ) else if "%BUILD_ARCH%"=="x86" (
        set MSBUILD_PLATFORM=win32
+       if "%WITH_CLANG%"=="1" (
+               echo Clang not supported for X86
+               exit /b 1
+       )
 )
 
 if NOT EXIST %BUILD_DIR%\nul (
index 1379754..24911a1 100644 (file)
@@ -1,4 +1,10 @@
 set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Ninja" %TESTS_CMAKE_ARGS% -DCMAKE_BUILD_TYPE=%BUILD_TYPE%
+
+if "%WITH_CLANG%" == "1" (
+       echo Building with ninja and clang not supported yet.
+       exit /b 1
+)
+
 :DetectionComplete
 if NOT "%verbose%" == "" (
        echo BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% 
index 5a82bf3..1cb2e1f 100644 (file)
@@ -36,6 +36,9 @@ if NOT "%1" == "" (
        ) else if "%1" == "bpy" (
                set TARGET=Bpy
                set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -C"%BLENDER_DIR%\build_files\cmake\config\bpy_module.cmake"
+       ) else if "%1" == "clang" (
+               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -T"LLVM-vs2017"
+               set WITH_CLANG=1
        ) else if "%1" == "release" (
                set TARGET=Release
        ) else if "%1" == "x86" (
index 34af3ff..d9a50a7 100644 (file)
@@ -21,3 +21,4 @@ set BUILD_UPDATE=
 set BUILD_SHOW_HASHES=
 set SHOW_HELP=
 set BUILD_WITH_NINJA=
+set WITH_CLANG=
\ No newline at end of file
index fc8ae50..cb535e1 100644 (file)
@@ -335,7 +335,7 @@ template<> EIGEN_STRONG_INLINE void prefetch<float>(const float*   addr) { _mm_p
 template<> EIGEN_STRONG_INLINE void prefetch<double>(const double* addr) { _mm_prefetch((const char*)(addr), _MM_HINT_T0); }
 template<> EIGEN_STRONG_INLINE void prefetch<int>(const int*       addr) { _mm_prefetch((const char*)(addr), _MM_HINT_T0); }
 
-#if defined(_MSC_VER) && defined(_WIN64) && !defined(__INTEL_COMPILER)
+#if defined(_MSC_VER) && defined(_WIN64) && !defined(__INTEL_COMPILER) && !defined(__clang__)
 // The temporary variable fixes an internal compilation error in vs <= 2008 and a wrong-result bug in vs 2010
 // Direct of the struct members fixed bug #62.
 template<> EIGEN_STRONG_INLINE float  pfirst<Packet4f>(const Packet4f& a) { return a.m128_f32[0]; }
diff --git a/extern/Eigen3/patches/blender.diff b/extern/Eigen3/patches/blender.diff
new file mode 100644 (file)
index 0000000..3d7ba6e
--- /dev/null
@@ -0,0 +1,12 @@
+diff -Naur c:\blender-git\blender\extern\Eigen3/Eigen/src/Core/arch/SSE/PacketMath.h k:\BlenderGit\blender\extern\Eigen3/Eigen/src/Core/arch/SSE/PacketMath.h
+--- c:\blender-git\blender\extern\Eigen3/Eigen/src/Core/arch/SSE/PacketMath.h  2018-05-25 13:29:14 -0600
++++ k:\BlenderGit\blender\extern\Eigen3/Eigen/src/Core/arch/SSE/PacketMath.h   2018-05-26 19:56:36 -0600
+@@ -335,7 +335,7 @@
+ template<> EIGEN_STRONG_INLINE void prefetch<double>(const double* addr) { _mm_prefetch((const char*)(addr), _MM_HINT_T0); }
+ template<> EIGEN_STRONG_INLINE void prefetch<int>(const int*       addr) { _mm_prefetch((const char*)(addr), _MM_HINT_T0); }
+-#if defined(_MSC_VER) && defined(_WIN64) && !defined(__INTEL_COMPILER)
++#if defined(_MSC_VER) && defined(_WIN64) && !defined(__INTEL_COMPILER) && !defined(__clang__)
+ // The temporary variable fixes an internal compilation error in vs <= 2008 and a wrong-result bug in vs 2010
+ // Direct of the struct members fixed bug #62.
+ template<> EIGEN_STRONG_INLINE float  pfirst<Packet4f>(const Packet4f& a) { return a.m128_f32[0]; }
index 96357dd..cb3bf2b 100644 (file)
@@ -1,3 +1,34 @@
+diff --git a/extern/bullet2/src/LinearMath/btScalar.h b/extern/bullet2/src/LinearMath/btScalar.h
+--- a/extern/bullet2/src/LinearMath/btScalar.h
++++ b/extern/bullet2/src/LinearMath/btScalar.h
+@@ -16,6 +16,9 @@
+ #ifndef BT_SCALAR_H
+ #define BT_SCALAR_H
++#if defined(_MSC_VER) && defined(__clang__) /* clang supplies it's own overloads already */
++#define BT_NO_SIMD_OPERATOR_OVERLOADS
++#endif
+ #ifdef BT_MANAGED_CODE
+ //Aligned data types not supported in managed code
+@@ -83,7 +86,7 @@
+                       #ifdef BT_USE_SSE
+ #if (_MSC_FULL_VER >= 170050727)//Visual Studio 2012 can compile SSE4/FMA3 (but SSE4/FMA3 is not enabled by default)
+-                      #define BT_ALLOW_SSE4
++                      //#define BT_ALLOW_SSE4 //disable this cause blender targets sse2 
+ #endif //(_MSC_FULL_VER >= 160040219)
+                       //BT_USE_SSE_IN_API is disabled under Windows by default, because 
+@@ -102,7 +105,7 @@
+               #endif //__MINGW32__
+ #ifdef BT_DEBUG
+-      #ifdef _MSC_VER
++      #if defined(_MSC_VER) && !defined(__clang__)
+               #include <stdio.h>
+               #define btAssert(x) { if(!(x)){printf("Assert "__FILE__ ":%u ("#x")\n", __LINE__);__debugbreak();       }}
+       #else//_MSC_VER
 diff --git a/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h b/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h
 index be9eca6..ec40c96 100644
 --- a/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h
index 0bfd255..898669f 100644 (file)
@@ -16,6 +16,9 @@ subject to the following restrictions:
 
 #ifndef BT_SCALAR_H
 #define BT_SCALAR_H
+#if defined(_MSC_VER) && defined(__clang__) /* clang supplies it's own overloads already */
+#define BT_NO_SIMD_OPERATOR_OVERLOADS
+#endif
 
 #ifdef BT_MANAGED_CODE
 //Aligned data types not supported in managed code
@@ -83,7 +86,7 @@ inline int    btGetVersion()
                        #ifdef BT_USE_SSE
 
 #if (_MSC_FULL_VER >= 170050727)//Visual Studio 2012 can compile SSE4/FMA3 (but SSE4/FMA3 is not enabled by default)
-                       #define BT_ALLOW_SSE4
+                       //#define BT_ALLOW_SSE4 //disable this cause blender targets sse2 
 #endif //(_MSC_FULL_VER >= 160040219)
 
                        //BT_USE_SSE_IN_API is disabled under Windows by default, because 
@@ -102,7 +105,7 @@ inline int  btGetVersion()
                #endif //__MINGW32__
 
 #ifdef BT_DEBUG
-       #ifdef _MSC_VER
+       #if defined(_MSC_VER) && !defined(__clang__)
                #include <stdio.h>
                #define btAssert(x) { if(!(x)){printf("Assert "__FILE__ ":%u ("#x")\n", __LINE__);__debugbreak();       }}
        #else//_MSC_VER
index c24a909..39ed4ef 100644 (file)
 #include <windows.h>
 #include <intrin.h>
 
-/******************************************************************************/
+#if defined (__clang__)
+#  pragma GCC diagnostic push
+#  pragma GCC diagnostic ignored "-Wincompatible-pointer-types"
+#endif
+
 /* 64-bit operations. */
 #if (LG_SIZEOF_PTR == 8 || LG_SIZEOF_INT == 8)
 /* Unsigned */
@@ -205,4 +209,9 @@ ATOMIC_INLINE int8_t atomic_fetch_and_or_int8(int8_t *p, int8_t b)
 #endif
 }
 
+
+#if defined (__clang__)
+#  pragma GCC diagnostic pop
+#endif
+
 #endif /* __ATOMIC_OPS_MSVC_H__ */
index c3305ac..100a526 100644 (file)
@@ -31,7 +31,7 @@ elseif(NOT WITH_CPU_SSE)
        set(CXX_HAS_SSE FALSE)
        set(CXX_HAS_AVX FALSE)
        set(CXX_HAS_AVX2 FALSE)
-elseif(WIN32 AND MSVC)
+elseif(WIN32 AND MSVC AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
        set(CXX_HAS_SSE TRUE)
        set(CXX_HAS_AVX TRUE)
        set(CXX_HAS_AVX2 TRUE)
@@ -306,7 +306,7 @@ if(WITH_CYCLES_CUDA_BINARIES AND (NOT WITH_CYCLES_CUBIN_COMPILER))
                elseif(${CUDA_VERSION} EQUAL "9.1")
                        set(MAX_MSVC 1911)
                endif()
-               if(NOT MSVC_VERSION LESS ${MAX_MSVC})
+               if(NOT MSVC_VERSION LESS ${MAX_MSVC} OR CMAKE_C_COMPILER_ID MATCHES "Clang")
                        message(STATUS "nvcc not supported for this compiler version, using cycles_cubin_cc instead.")
                        set(WITH_CYCLES_CUBIN_COMPILER ON)
                endif()
index 56c38d8..7bf833e 100644 (file)
@@ -349,7 +349,7 @@ template<typename T> struct TextureInterpolator  {
         * Only happens for AVX2 kernel and global __KERNEL_SSE__ vectorization
         * enabled.
         */
-#ifdef __GNUC__
+#if defined(__GNUC__) || defined(__clang__)
        static ccl_always_inline
 #else
        static ccl_never_inline
index 28d5cad..75018bb 100644 (file)
@@ -1660,7 +1660,7 @@ void BKE_rigidbody_do_simulation(struct Depsgraph *depsgraph, Scene *scene, floa
 #else  /* WITH_BULLET */
 
 /* stubs */
-#ifdef __GNUC__
+#if defined(__GNUC__) || defined(__clang__)
 #  pragma GCC diagnostic push
 #  pragma GCC diagnostic ignored "-Wunused-parameter"
 #endif
@@ -1686,7 +1686,7 @@ void BKE_rigidbody_cache_reset(RigidBodyWorld *rbw) {}
 void BKE_rigidbody_rebuild_world(struct Depsgraph *depsgraph, Scene *scene, float ctime) {}
 void BKE_rigidbody_do_simulation(struct Depsgraph *depsgraph, Scene *scene, float ctime) {}
 
-#ifdef __GNUC__
+#if defined(__GNUC__) || defined(__clang__)
 #  pragma GCC diagnostic pop
 #endif
 
index c0b76aa..75ddb5e 100644 (file)
@@ -552,13 +552,13 @@ extern bool BLI_memory_is_zero(const void *arr, const size_t arr_size);
 
 
 /* UNUSED macro, for function argument */
-#ifdef __GNUC__
+#if defined(__GNUC__) || defined(__clang__) 
 #  define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))
 #else
 #  define UNUSED(x) UNUSED_ ## x
 #endif
 
-#ifdef __GNUC__
+#if defined(__GNUC__) || defined(__clang__) 
 #  define UNUSED_FUNCTION(x) __attribute__((__unused__)) UNUSED_ ## x
 #else
 #  define UNUSED_FUNCTION(x) UNUSED_ ## x
index 5245d24..320bebc 100644 (file)
@@ -169,7 +169,7 @@ set(SRC
        bmesh_tools.h
 )
 
-if(MSVC)
+if(MSVC AND NOT MSVC_CLANG)
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX /wd4101")
 endif()
 
index 1c55925..80d1897 100644 (file)
@@ -3482,7 +3482,7 @@ static void rna_generate(BlenderRNA *brna, FILE *f, const char *filename, const
 
        /* we want the included C files to have warnings enabled but for the generated code
         * ignore unused-parameter warnings which are hard to prevent */
-#ifdef __GNUC__
+#if defined( __GNUC__) || defined(__clang__)
        fprintf(f, "#pragma GCC diagnostic ignored \"-Wunused-parameter\"\n\n");
 #endif
 
index cc186be..3b3a4d6 100644 (file)
@@ -32,7 +32,7 @@
 
 #include "BPY_extern.h"
 
-#if defined(__GNUC__)
+#if defined(__GNUC__) || defined(__clang__)
 #  pragma GCC diagnostic error "-Wmissing-prototypes"
 #  pragma GCC diagnostic ignored "-Wunused-parameter"
 #endif