Revert "Fix T41222 Blender gives weird output when baking (4096*4096) resolution...
[blender-staging.git] / intern / cycles / SConscript
1 #!/usr/bin/env python
2 #
3 # ***** BEGIN GPL LICENSE BLOCK *****
4 #
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software Foundation,
17 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 #
19 # The Original Code is Copyright (C) 2011, Blender Foundation
20 # All rights reserved.
21 #
22 # The Original Code is: all of this file.
23 #
24 # Contributor(s): Nathan Letwory.
25 #
26 # ***** END GPL LICENSE BLOCK *****
27
28 from os import path
29 Import('env')
30
31 cycles = env.Clone()
32
33 cycles.Depends('../../source/blender/makesrna/intern/RNA_blender_cpp.h', 'makesrna')
34
35 sources = cycles.Glob('bvh/*.cpp') + cycles.Glob('device/*.cpp') + cycles.Glob('kernel/*.cpp') + cycles.Glob('render/*.cpp') + cycles.Glob('subd/*.cpp') + cycles.Glob('util/*.cpp') + cycles.Glob('blender/*.cpp')
36
37 sources.remove(path.join('util', 'util_view.cpp'))
38 sources.remove(path.join('kernel', 'kernel_sse2.cpp'))
39 sources.remove(path.join('kernel', 'kernel_sse3.cpp'))
40 sources.remove(path.join('kernel', 'kernel_sse41.cpp'))
41 sources.remove(path.join('kernel', 'kernel_avx.cpp'))
42 sources.remove(path.join('kernel', 'kernel_avx2.cpp'))
43
44 incs = [] 
45 defs = []
46 cxxflags = Split(env['CXXFLAGS'])
47
48 defs.append('GLEW_STATIC')
49
50 defs.append('CCL_NAMESPACE_BEGIN=namespace ccl {')
51 defs.append('CCL_NAMESPACE_END=}')
52
53 defs.append('WITH_OPENCL')
54 defs.append('WITH_MULTI')
55 defs.append('WITH_CUDA')
56
57 if env['WITH_BF_CYCLES_OSL']:
58     defs.append('WITH_OSL')
59     defs.append('OSL_STATIC_LIBRARY')
60     incs.append(cycles['BF_OSL_INC'])
61
62 incs.extend('. bvh render device kernel kernel/osl kernel/svm util subd'.split())
63 incs.extend('#intern/guardedalloc #source/blender/makesrna #source/blender/makesdna #source/blender/blenlib'.split())
64 incs.extend('#source/blender/blenloader ../../source/blender/makesrna/intern'.split())
65 incs.extend('#extern/glew/include #extern/clew/include #extern/cuew/include #intern/mikktspace'.split())
66 incs.append(cycles['BF_OIIO_INC'])
67 incs.append(cycles['BF_BOOST_INC'])
68 incs.append(cycles['BF_OPENEXR_INC'].split())
69 incs.extend(cycles['BF_PYTHON_INC'].split())
70
71 if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
72     cxxflags.append('-D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc'.split())
73 else:
74     cxxflags.append('-ffast-math'.split())
75
76 # Warnings
77 # XXX Not supported by gcc < 4.9, since we do not have any 'supported flags' test as in cmake,
78 #     simpler to comment for now.
79 #if env['C_COMPILER_ID'] == 'gcc':
80 #    cxxflags.append(['-Werror=float-conversion'])
81
82 if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', 'win64-mingw'):
83     incs.append(env['BF_PTHREADS_INC'])
84
85 # optimized kernel. we compile the kernel multiple times with different
86 # optimization flags, at runtime it will choose the optimal kernel
87 kernel_flags = {}
88
89 if env['OURPLATFORM'] == 'win32-vc':
90     # there is no /arch:SSE3, but intrinsics are available anyway
91     kernel_flags['sse2'] = '/arch:SSE /arch:SSE2 -D_CRT_SECURE_NO_WARNINGS /fp:fast /Ox /GS-'
92     kernel_flags['sse3'] = kernel_flags['sse2']
93
94 elif env['OURPLATFORM'] == 'win64-vc':
95     # /arch:AVX only available from visual studio 2012
96     kernel_flags['sse2'] = '-D_CRT_SECURE_NO_WARNINGS /fp:fast /Ox /GS-'
97     kernel_flags['sse3'] = kernel_flags['sse2']
98
99     if env['MSVC_VERSION'] >= '12.0':
100         kernel_flags['sse41'] = kernel_flags['sse3']
101         kernel_flags['avx'] = kernel_flags['sse41'] + ' /arch:AVX'
102         kernel_flags['avx2'] = kernel_flags['sse41'] + ' /arch:AVX /arch:AVX2'
103 else:
104     # -mavx only available with relatively new gcc/clang
105     kernel_flags['sse2'] = '-ffast-math -msse -msse2 -mfpmath=sse'
106     kernel_flags['sse3'] = kernel_flags['sse2'] + ' -msse3 -mssse3'
107     kernel_flags['sse41'] = kernel_flags['sse3'] + ' -msse4.1'
108
109     if (env['C_COMPILER_ID'] == 'gcc' and env['CCVERSION'] >= '4.6') or (env['C_COMPILER_ID'] == 'clang' and env['CCVERSION'] >= '3.1'):
110         kernel_flags['avx'] = kernel_flags['sse41'] + ' -mavx'
111         kernel_flags['avx2'] = kernel_flags['avx'] + ' -mavx2 -mfma -mlzcnt -mbmi -mbmi2'
112
113 for kernel_type in kernel_flags.keys():
114     defs.append('WITH_KERNEL_' + kernel_type.upper())
115
116 for kernel_type in kernel_flags.keys():
117     kernel_source = path.join('kernel', 'kernel_' + kernel_type + '.cpp')
118     kernel_cxxflags = Split(env['CXXFLAGS'])
119     kernel_cxxflags.append(kernel_flags[kernel_type].split())
120     kernel_defs = defs[:]
121     kernel_env = cycles.Clone()
122
123     if env['OURPLATFORM'] == 'darwin' and env['C_COMPILER_ID'] == 'gcc' and  env['CCVERSION'] >= '4.6':
124         # use Apple assembler for avx , gnu-compilers do not support it ( gnu gcc-4.6 or higher case )
125         kernel_env.BlenderLib('bf_intern_cycles_' + kernel_type, [kernel_source], incs, kernel_defs,
126             libtype=['intern'], priority=[10], cxx_compileflags=kernel_cxxflags,
127             cc_compilerchange='/usr/bin/clang', cxx_compilerchange='/usr/bin/clang++')
128     else:
129         kernel_env.BlenderLib('bf_intern_cycles_' + kernel_type, [kernel_source], incs, kernel_defs,
130             libtype=['intern'], priority=[10], cxx_compileflags=kernel_cxxflags)
131
132 cycles.BlenderLib('bf_intern_cycles', sources, incs, defs, libtype=['intern'], priority=[0], cxx_compileflags=cxxflags)
133
134 # OSL shaders
135 if env['WITH_BF_CYCLES_OSL']:
136     oso_files = SConscript(['kernel/shaders/SConscript'])
137     cycles.Depends("kernel/osl/osl_shader.o", oso_files)
138
139     SConscript(['kernel/osl/SConscript'])
140
141 # cuda kernel binaries
142 if env['WITH_BF_CYCLES_CUDA_BINARIES']:
143     kernel_binaries = SConscript(['kernel/SConscript'])
144     cycles.Depends("device/device_cuda.o", kernel_binaries)
145