replaces another so it can do updates (e.g. dopesheet editor can sync channel selection). Also coded a simple optimization for allocating small objects, based on mempools. It's #ifdef'd out, you can enabled it by defining OPTIMIZE_SMALL_BLOCKS (e.g. adding -DDOPTIMIZE_SMALL_BLOCKS to your compiler flags). We suffer from a great deal of performance loss from the system allocator (vgroups, ghash, edgehash, the singly-linked list implementation in blenlib, editmesh, and likely a great many areas I'm forgetting), and this is the common solution for handling the many-small-objects problem. It's not really production-ready yet (it's long-term memory consequencers need to be profiled first, and the implementation tweaked as necassary), but for people on systems with slow system allocators it's worth trying. Note that since this creates a guardedalloc<->blenlib link, the build systems need to be updated accordingly (I've already done this for scons, though I'm not sure if the player builds).
159 lines
4.4 KiB
Python
159 lines
4.4 KiB
Python
#!/usr/bin/python
|
|
import sys
|
|
import os
|
|
|
|
def normpath(path):
|
|
return os.path.abspath(os.path.normpath(path))
|
|
|
|
Import ('env')
|
|
cflags = ['-Wall']
|
|
defines = []
|
|
root_build_dir=normpath(env['BF_BUILDDIR'])
|
|
|
|
source_files = env.Glob('*.c')
|
|
source_files.remove('rna_access.c')
|
|
|
|
generated_files = source_files[:]
|
|
generated_files.remove('rna_define.c')
|
|
generated_files.remove('makesrna.c')
|
|
|
|
api_files = env.Glob('*_api.c')
|
|
for api_file in api_files:
|
|
generated_files.remove(api_file)
|
|
|
|
generated_files = [filename[:-2] + '_gen.c' for filename in generated_files]
|
|
|
|
makesrna_tool = env.Clone()
|
|
rna = env.Clone()
|
|
makesrna_tool.Append(CCFLAGS = '-DBASE_HEADER="\\"source/blender/makesrna/\\"" ')
|
|
|
|
defs = []
|
|
|
|
incs = '#/intern/guardedalloc ../../blenlib ../../blenkernel'
|
|
incs += ' ../../imbuf ../../makesdna ../../makesrna ../../ikplugin'
|
|
incs += ' ../../windowmanager ../../editors/include'
|
|
incs += ' ../../render/extern/include'
|
|
|
|
if env['WITH_BF_OPENEXR']:
|
|
defs.append('WITH_OPENEXR')
|
|
|
|
if env['WITH_BF_OPENJPEG']:
|
|
defs.append('WITH_OPENJPEG')
|
|
|
|
if env['WITH_BF_DDS']:
|
|
defs.append('WITH_DDS')
|
|
|
|
if env['WITH_BF_FFMPEG']:
|
|
defs.append('WITH_FFMPEG')
|
|
incs += ' ' + env['BF_FFMPEG_INC']
|
|
|
|
if env['WITH_BF_OGG']:
|
|
defs.append('WITH_OGG')
|
|
|
|
if env['WITH_BF_QUICKTIME']:
|
|
defs.append('WITH_QUICKTIME')
|
|
incs += ' ../../quicktime'
|
|
|
|
if env['WITH_BF_LCMS']:
|
|
defs.append('WITH_LCMS')
|
|
|
|
if env['WITH_BF_GAMEENGINE']:
|
|
defs.append('GAMEBLENDER=1')
|
|
|
|
if env['WITH_BF_FFTW3']:
|
|
defs.append('FFTW3=1')
|
|
|
|
if env['WITH_BF_SDL']:
|
|
defs.append('WITH_SDL')
|
|
|
|
if env['WITH_BF_OPENAL']:
|
|
defs.append('WITH_OPENAL')
|
|
|
|
if env['WITH_BF_JACK']:
|
|
defs.append('WITH_JACK')
|
|
|
|
if env['BF_UNIT_TEST']:
|
|
defs.append('UNIT_TEST')
|
|
|
|
|
|
if env['OURPLATFORM'] == 'linux2':
|
|
cflags='-pthread'
|
|
incs += ' ../../../extern/binreloc/include'
|
|
|
|
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
|
|
incs += ' ' + env['BF_PTHREADS_INC']
|
|
|
|
makesrna_tool.Append(CPPDEFINES=defs)
|
|
|
|
makesrna_tool.Append (CPPPATH = Split(incs))
|
|
|
|
if env['OURPLATFORM'] == 'linuxcross':
|
|
USE_WINE = True # when cross compiling on linux 64bit this is useful
|
|
else:
|
|
USE_WINE = False
|
|
|
|
if not USE_WINE:
|
|
if env['OURPLATFORM'] == 'linuxcross':
|
|
makesdna_tool.Replace(CC='gcc')
|
|
makesdna_tool.Replace(AR='ar')
|
|
makesdna_tool.Replace(LINK='gcc')
|
|
|
|
if sys.platform != 'cygwin':
|
|
makesrna_tool.Append (CCFLAGS = cflags)
|
|
makesrna_tool.Append (CPPDEFINES = defines)
|
|
|
|
libdir = root_build_dir+'/lib'
|
|
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
|
|
libdir = '#' + libdir
|
|
|
|
makesrna_tool.Append (LIBPATH = libdir)
|
|
|
|
makesrna_tool.Append( CFLAGS = env['CFLAGS'])
|
|
makesrna_tool.Append( CCFLAGS = env['CCFLAGS'])
|
|
makesrna_tool.Append( LINKFLAGS = env['PLATFORM_LINKFLAGS'])
|
|
|
|
if env['BF_PROFILE']:
|
|
makesrna_tool.Append (LINKFLAGS = env['BF_PROFILE_FLAGS'])
|
|
|
|
if env['BF_DEBUG']:
|
|
makesrna_tool.Append(CFLAGS = env['BF_DEBUG_CFLAGS'])
|
|
makesrna_tool.Append(CCFLAGS = env['BF_DEBUG_CCFLAGS'])
|
|
if env['OURPLATFORM'] in ('win32-vc','win64-vc'):
|
|
makesrna_tool.Append(LINKFLAGS = ['/DEBUG','/PDB:makesrna.pdb'])
|
|
|
|
targetpath = root_build_dir+'/makesrna'
|
|
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
|
|
targetpath = '#' + targetpath
|
|
|
|
if env['OURPLATFORM'] == 'linux2' and root_build_dir[0]==os.sep:
|
|
makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_guardedalloc', 'bf_dna', 'bf_blenlib'])
|
|
else:
|
|
makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_guardedalloc', 'bf_dna', 'bf_blenlib'])
|
|
|
|
rna_dict = rna.Dictionary()
|
|
rna.Depends (generated_files, makesrna)
|
|
|
|
# this seems bad, how to retrieve it from scons?
|
|
build_dir = root_build_dir + os.sep +'source' + os.sep + 'blender' + os.sep + 'makesrna' + os.sep + 'intern' + os.sep
|
|
|
|
if env['OURPLATFORM'] != 'linuxcross':
|
|
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
|
|
rna.Command (generated_files, '', "\"" + root_build_dir+os.sep+"makesrna.exe\" \"" + build_dir )
|
|
else:
|
|
rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna " + build_dir)
|
|
else:
|
|
rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
|
|
|
|
if USE_WINE:
|
|
rna.Command (generated_files, '', 'wine ' + root_build_dir+os.sep+"makesrna.exe " + build_dir)
|
|
else:
|
|
rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
|
|
|
|
|
|
obj = ['intern/rna_access.c']
|
|
for generated_file in generated_files:
|
|
obj += ['intern/' + generated_file]
|
|
|
|
Return ('obj')
|
|
|