#!/usr/bin/python import sys import os Import('env') defs = '' cflags = [] if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): defs += ' WIN32 NDEBUG _WINDOWS' #cflags += ['/MT', '/W3', '/GX', '/O2', '/Op'] cflags += ['/MT', '/W3', '/GX', '/Og', '/Ot', '/Ob1', '/Op', '/G6', '/O3', '/EHcs'] elif env['OURPLATFORM'] in ('win32-mingw', 'linuxcross', 'win64-mingw'): defs += ' NDEBUG' cflags += ['-O2'] elif env['OURPLATFORM'] in ('linux', 'freebsd4', 'freebsd5'): defs += ' NDEBUG' cflags += ['-O2'] elif sys.platform=='darwin': defs += ' NDEBUG' bt_flags = env['CCFLAGS'] + ['-fPIC', '-msse','-msse2', '-msse3', '-mssse3'] # basic -O0 optimization bt_opt_flags = bt_flags + ['-O3'] bullet2_src = env.Glob("LinearMath/*.cpp") bullet2_src += env.Glob("BulletCollision/BroadphaseCollision/*.cpp") bullet2_src += env.Glob("BulletCollision/CollisionDispatch/*.cpp") bullet2_src += env.Glob("BulletCollision/Gimpact/*.cpp") bullet2_src += env.Glob("BulletCollision/CollisionShapes/*.cpp") bullet2_src += env.Glob("BulletCollision/NarrowPhaseCollision/*.cpp") bullet2_src += env.Glob("BulletDynamics/Vehicle/*.cpp") bullet2_src += env.Glob("BulletDynamics/ConstraintSolver/*.cpp") bullet2_src += env.Glob("BulletDynamics/Dynamics/*.cpp") bullet2_src += env.Glob("BulletDynamics/Character/*.cpp") bullet2_src += env.Glob("BulletDynamics/Featherstone/*.cpp") bullet2_src += env.Glob("BulletDynamics/MLCPSolvers/*.cpp") bullet2_src += env.Glob("BulletSoftBody/*.cpp") incs = '. BulletCollision BulletDynamics LinearMath BulletSoftBody' if sys.platform=='darwin': if env['C_COMPILER_ID'] == 'clang' and env['CCVERSION'] >= '3.4': # Due some bugs in bullet, clang 3.4 produces wrong code when optimized > -O0 # to avoid too much speed penalty when compiling whole bullet lib non-optimized, # we build seperate non-optimized/optimized parts and just link together finally bullet2_src.remove("BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp") bullet2_fix_src = env.Glob("BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp") env.BlenderLib ( libname = 'extern_fix_bullet2', sources=bullet2_fix_src, includes=Split(incs), defines=Split(defs), libtype=['extern','player'], priority=[20,137], cc_compileflags=bt_flags, cxx_compileflags=bt_flags ) env.BlenderLib ( libname = 'extern_bullet2', sources=bullet2_src, includes=Split(incs), defines=Split(defs), libtype=['extern','player'], priority=[20,137], cc_compileflags=bt_opt_flags, cxx_compileflags=bt_opt_flags ) else: env.BlenderLib ( libname = 'extern_bullet2', sources=bullet2_src, includes=Split(incs), defines=Split(defs), libtype=['extern','player'], priority=[20,137], compileflags=cflags )