Speedup for guarded allocator
[blender.git] / source / blender / makesdna / intern / 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) 2006, 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 import sys
29 import os
30
31 def normpath(path):
32     return os.path.abspath(os.path.normpath(path))
33
34 Import ('env')
35 cflags = ''
36 defines = []
37 root_build_dir=normpath(env['BF_BUILDDIR'])
38
39 defines.append('WITH_GUARDEDALLOC')
40
41 source_files = ['makesdna.c']
42 header_files = env.Glob('../*.h')
43
44 makesdna_tool = env.Clone()
45 dna = env.Clone()
46 makesdna_tool.Append(CCFLAGS = '-DBASE_HEADER="\\"source/blender/makesdna/\\"" ')
47
48 makesdna_tool.Append (CPPPATH = ['#/intern/guardedalloc',
49                                  '#/intern/atomic',
50                                  '../../makesdna', '../../bmesh'])
51
52 if env['OURPLATFORM'] == 'linuxcross':
53     USE_WINE = True # when cross compiling on linux 64bit this is useful
54 else:
55     USE_WINE = False
56
57 if not USE_WINE:
58     if env['OURPLATFORM'] == 'linuxcross':
59         makesdna_tool.Replace(CC='gcc')
60         makesdna_tool.Replace(AR='ar')
61         makesdna_tool.Replace(LINK='gcc')
62
63 if sys.platform != 'cygwin':
64     makesdna_tool.Append (CCFLAGS = cflags)
65 makesdna_tool.Append (CPPDEFINES = defines)
66 makesdna_tool.Append( CFLAGS = env['CFLAGS'])
67 makesdna_tool.Append( CCFLAGS = env['CCFLAGS'])
68 makesdna_tool.Append( LINKFLAGS = env['PLATFORM_LINKFLAGS'])
69 targetdir = normpath(root_build_dir+'/lib')
70
71 if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
72     targetdir = '#'+targetdir
73 makesdna_tool.Append (LIBPATH = targetdir)
74 if env['BF_PROFILE']:
75     makesdna_tool.Append (LINKFLAGS = env['BF_PROFILE_LINKFLAGS'])
76
77 targetdir = normpath(root_build_dir + '/makesdna')
78
79 if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
80     targetdir = '#' + targetdir
81
82 makesdna = makesdna_tool.Program (target = targetdir, source = source_files, LIBS=['bf_intern_guardedalloc', 'bf_blenlib'])
83
84 dna_dict = dna.Dictionary()
85 dna.Depends ('dna.c', makesdna)
86 dna.Depends ('dna.c', header_files)
87
88 if env['OURPLATFORM'] != 'linuxcross':
89     if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw', 'win64-mingw'):
90         dna.Command ('dna.c', '', "\"" + root_build_dir+os.sep+"makesdna\" $TARGET")
91     else:
92         dna.Command ('dna.c', '', "\"" + root_build_dir+os.sep+"makesdna\" $TARGET")
93 else:
94     if USE_WINE:
95         dna.Command ('dna.c', '', 'wine ' + root_build_dir+os.sep+"makesdna $TARGET")
96     else:
97         dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna.exe $TARGET")
98
99 # TODO, get WITH_DNA_GHASH working, see CMake's 'WITH_DNA_GHASH'
100 obj = ['intern/dna.c', 'intern/dna_genfile.c']
101 Return ('obj')