1 from setuptools import find_packages
2 from sys import platform as _platform
7 from distutils.core import setup
8 from distutils.extension import Extension
9 from distutils.util import get_platform
12 # monkey-patch for parallel compilation
13 import multiprocessing
14 import multiprocessing.pool
17 def parallelCCompile(self,
26 # those lines are copied from distutils.ccompiler.CCompiler directly
27 macros, objects, extra_postargs, pp_opts, build = self._setup_compile(
28 output_dir, macros, include_dirs, sources, depends, extra_postargs)
29 cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
31 N = 2 * multiprocessing.cpu_count() # number of parallel compilations
33 # On Unix-like platforms attempt to obtain the total memory in the
34 # machine and limit the number of parallel jobs to the number of Gbs
35 # of RAM (to avoid killing smaller platforms like the Pi)
36 mem = os.sysconf('SC_PHYS_PAGES') * os.sysconf('SC_PAGE_SIZE') # bytes
37 except (AttributeError, ValueError):
38 # Couldn't query RAM; don't limit parallelism (it's probably a well
39 # equipped Windows / Mac OS X box)
42 mem = max(1, int(round(mem / 1024**3))) # convert to Gb
45 def _single_compile(obj):
51 if _platform == "darwin":
52 if src.endswith('.cpp'):
53 newcc_args = cc_args + ["-mmacosx-version-min=10.7", "-stdlib=libc++"]
54 self._compile(obj, src, ext, newcc_args, extra_postargs, pp_opts)
56 # convert to list, imap is evaluated on-demand
57 pool = multiprocessing.pool.ThreadPool(N)
58 list(pool.imap(_single_compile, objects))
62 import distutils.ccompiler
63 distutils.ccompiler.CCompiler.compile = parallelCCompile
65 #see http://stackoverflow.com/a/8719066/295157
68 platform = get_platform()
72 CXX_FLAGS += '-DGWEN_COMPILE_STATIC '
73 CXX_FLAGS += '-DBT_USE_DOUBLE_PRECISION '
74 CXX_FLAGS += '-DBT_ENABLE_ENET '
75 CXX_FLAGS += '-DBT_ENABLE_CLSOCKET '
76 CXX_FLAGS += '-DB3_DUMP_PYTHON_VERSION '
77 CXX_FLAGS += '-DEGL_ADD_PYTHON_INIT '
78 CXX_FLAGS += '-DB3_ENABLE_FILEIO_PLUGIN '
79 CXX_FLAGS += '-DB3_USE_ZIPFILE_FILEIO '
80 CXX_FLAGS += '-DBT_THREADSAFE=1 '
81 CXX_FLAGS += '-DSTATIC_LINK_SPD_PLUGIN '
82 CXX_FLAGS += '-DBT_ENABLE_VHACD '
86 # libraries += [current_python]
93 NP_DIRS = [numpy.get_include()]
95 print("numpy is disabled. getCameraImage maybe slower.")
97 print("numpy is enabled.")
98 CXX_FLAGS += '-DPYBULLET_USE_NUMPY '
100 print("numpy_include_dirs = %s" % d)
101 include_dirs += NP_DIRS
103 sources = ["examples/pybullet/pybullet.c"]\
104 +["examples/ThirdPartyLibs/tinyxml2/tinyxml2.cpp"]\
105 +["examples/SharedMemory/plugins/stablePDPlugin/BulletConversion.cpp"]\
106 +["examples/SharedMemory/plugins/stablePDPlugin/KinTree.cpp"]\
107 +["examples/SharedMemory/plugins/stablePDPlugin/MathUtil.cpp"]\
108 +["examples/SharedMemory/plugins/stablePDPlugin/RBDModel.cpp"]\
109 +["examples/SharedMemory/plugins/stablePDPlugin/RBDUtil.cpp"]\
110 +["examples/SharedMemory/plugins/stablePDPlugin/Shape.cpp"]\
111 +["examples/SharedMemory/plugins/stablePDPlugin/SpAlg.cpp"]\
112 +["src/btLinearMathAll.cpp"]\
113 +["src/btBulletCollisionAll.cpp"]\
114 +["src/btBulletDynamicsAll.cpp"]\
115 +["examples/ExampleBrowser/InProcessExampleBrowser.cpp"]\
116 +["examples/TinyRenderer/geometry.cpp"]\
117 +["examples/TinyRenderer/model.cpp"]\
118 +["examples/TinyRenderer/tgaimage.cpp"]\
119 +["examples/TinyRenderer/our_gl.cpp"]\
120 +["examples/TinyRenderer/TinyRenderer.cpp"]\
121 +["examples/SharedMemory/plugins/pdControlPlugin/pdControlPlugin.cpp"]\
122 +["examples/SharedMemory/plugins/collisionFilterPlugin/collisionFilterPlugin.cpp"]\
123 +["examples/SharedMemory/plugins/fileIOPlugin/fileIOPlugin.cpp"]\
124 +["examples/SharedMemory/b3RobotSimulatorClientAPI_NoDirect.cpp"]\
125 +["examples/SharedMemory/IKTrajectoryHelper.cpp"]\
126 +["examples/SharedMemory/InProcessMemory.cpp"]\
127 +["examples/SharedMemory/PhysicsClient.cpp"]\
128 +["examples/SharedMemory/PhysicsServer.cpp"]\
129 +["examples/SharedMemory/GraphicsClientExample.cpp"]\
130 +["examples/SharedMemory/GraphicsServerExample.cpp"]\
131 +["examples/SharedMemory/RemoteGUIHelper.cpp"]\
132 +["examples/SharedMemory/RemoteGUIHelperTCP.cpp"]\
133 +["examples/SharedMemory/PhysicsServerExample.cpp"]\
134 +["examples/SharedMemory/PhysicsServerExampleBullet2.cpp"]\
135 +["examples/SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp"]\
136 +["examples/SharedMemory/PhysicsServerSharedMemory.cpp"]\
137 +["examples/SharedMemory/PhysicsDirect.cpp"]\
138 +["examples/SharedMemory/PhysicsDirectC_API.cpp"]\
139 +["examples/SharedMemory/PhysicsServerCommandProcessor.cpp"]\
140 +["examples/SharedMemory/PhysicsClientSharedMemory.cpp"]\
141 +["examples/SharedMemory/PhysicsClientSharedMemory_C_API.cpp"]\
142 +["examples/SharedMemory/PhysicsClientC_API.cpp"]\
143 +["examples/SharedMemory/Win32SharedMemory.cpp"]\
144 +["examples/SharedMemory/PosixSharedMemory.cpp"]\
145 +["examples/SharedMemory/plugins/tinyRendererPlugin/TinyRendererVisualShapeConverter.cpp"]\
146 +["examples/SharedMemory/plugins/tinyRendererPlugin/tinyRendererPlugin.cpp"]\
147 +["examples/SharedMemory/PhysicsClientUDP.cpp"]\
148 +["examples/SharedMemory/PhysicsClientUDP_C_API.cpp"]\
149 +["examples/SharedMemory/PhysicsClientTCP.cpp"]\
150 +["examples/SharedMemory/PhysicsClientTCP_C_API.cpp"]\
151 +["examples/SharedMemory/b3PluginManager.cpp"]\
152 +["examples/Utils/b3ResourcePath.cpp"]\
153 +["examples/Utils/RobotLoggingUtil.cpp"]\
154 +["examples/Utils/ChromeTraceUtil.cpp"]\
155 +["examples/Utils/b3Clock.cpp"]\
156 +["examples/Utils/b3Quickprof.cpp"]\
157 +["examples/ThirdPartyLibs/Wavefront/tiny_obj_loader.cpp"]\
158 +["examples/ThirdPartyLibs/stb_image/stb_image.cpp"]\
159 +["examples/ThirdPartyLibs/stb_image/stb_image_write.cpp"]\
160 +["examples/ThirdPartyLibs/minizip/ioapi.c"]\
161 +["examples/ThirdPartyLibs/minizip/unzip.c"]\
162 +["examples/ThirdPartyLibs/minizip/zip.c"]\
163 +["examples/ThirdPartyLibs/zlib/adler32.c"]\
164 +["examples/ThirdPartyLibs/zlib/compress.c"]\
165 +["examples/ThirdPartyLibs/zlib/crc32.c"]\
166 +["examples/ThirdPartyLibs/zlib/deflate.c"]\
167 +["examples/ThirdPartyLibs/zlib/gzclose.c"]\
168 +["examples/ThirdPartyLibs/zlib/gzlib.c"]\
169 +["examples/ThirdPartyLibs/zlib/gzread.c"]\
170 +["examples/ThirdPartyLibs/zlib/gzwrite.c"]\
171 +["examples/ThirdPartyLibs/zlib/infback.c"]\
172 +["examples/ThirdPartyLibs/zlib/inffast.c"]\
173 +["examples/ThirdPartyLibs/zlib/inflate.c"]\
174 +["examples/ThirdPartyLibs/zlib/inftrees.c"]\
175 +["examples/ThirdPartyLibs/zlib/trees.c"]\
176 +["examples/ThirdPartyLibs/zlib/uncompr.c"]\
177 +["examples/ThirdPartyLibs/zlib/zutil.c"]\
178 +["examples/Importers/ImportColladaDemo/LoadMeshFromCollada.cpp"]\
179 +["examples/Importers/ImportObjDemo/LoadMeshFromObj.cpp"]\
180 +["examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp"]\
181 +["examples/Importers/ImportMJCFDemo/BulletMJCFImporter.cpp"]\
182 +["examples/Importers/ImportURDFDemo/BulletUrdfImporter.cpp"]\
183 +["examples/Importers/ImportURDFDemo/MyMultiBodyCreator.cpp"]\
184 +["examples/Importers/ImportURDFDemo/URDF2Bullet.cpp"]\
185 +["examples/Importers/ImportURDFDemo/UrdfParser.cpp"]\
186 +["examples/Importers/ImportURDFDemo/urdfStringSplit.cpp"]\
187 +["examples/Importers/ImportMeshUtility/b3ImportMeshUtility.cpp"]\
188 +["examples/MultiThreading/b3PosixThreadSupport.cpp"]\
189 +["examples/MultiThreading/b3Win32ThreadSupport.cpp"]\
190 +["examples/MultiThreading/b3ThreadSupportInterface.cpp"]\
191 +["examples/ThirdPartyLibs/enet/callbacks.c"]\
192 +["examples/ThirdPartyLibs/enet/compress.c"]\
193 +["examples/ThirdPartyLibs/enet/host.c"]\
194 +["examples/ThirdPartyLibs/enet/list.c"]\
195 +["examples/ThirdPartyLibs/enet/packet.c"]\
196 +["examples/ThirdPartyLibs/enet/peer.c"]\
197 +["examples/ThirdPartyLibs/enet/protocol.c"]\
198 +["examples/ExampleBrowser/OpenGLGuiHelper.cpp"]\
199 +["examples/ExampleBrowser/OpenGLExampleBrowser.cpp"]\
200 +["examples/ExampleBrowser/CollisionShape2TriangleMesh.cpp"]\
201 +["examples/ExampleBrowser/GL_ShapeDrawer.cpp"]\
202 +["examples/OpenGLWindow/SimpleOpenGL2Renderer.cpp"]\
203 +["examples/OpenGLWindow/GLInstancingRenderer.cpp"]\
204 +["examples/OpenGLWindow/SimpleOpenGL3App.cpp"]\
205 +["examples/OpenGLWindow/GLPrimitiveRenderer.cpp"]\
206 +["examples/OpenGLWindow/TwFonts.cpp"]\
207 +["examples/OpenGLWindow/GLRenderToTexture.cpp"]\
208 +["examples/OpenGLWindow/LoadShader.cpp"]\
209 +["examples/OpenGLWindow/OpenSans.cpp"]\
210 +["examples/OpenGLWindow/SimpleCamera.cpp"]\
211 +["examples/OpenGLWindow/fontstash.cpp"]\
212 +["examples/OpenGLWindow/SimpleOpenGL2App.cpp"]\
213 +["examples/OpenGLWindow/opengl_fontstashcallbacks.cpp"]\
214 +["examples/ExampleBrowser/GwenGUISupport/GraphingTexture.cpp"]\
215 +["examples/ExampleBrowser/GwenGUISupport/GwenProfileWindow.cpp"]\
216 +["examples/ExampleBrowser/GwenGUISupport/gwenUserInterface.cpp"]\
217 +["examples/ExampleBrowser/GwenGUISupport/GwenParameterInterface.cpp"]\
218 +["examples/ExampleBrowser/GwenGUISupport/GwenTextureWindow.cpp"]\
219 +["src/Bullet3Common/b3AlignedAllocator.cpp"]\
220 +["src/Bullet3Common/b3Logging.cpp"]\
221 +["src/Bullet3Common/b3Vector3.cpp"]\
222 +["examples/ThirdPartyLibs/clsocket/src/ActiveSocket.cpp"]\
223 +["examples/ThirdPartyLibs/clsocket/src/PassiveSocket.cpp"]\
224 +["examples/ThirdPartyLibs/clsocket/src/SimpleSocket.cpp"]\
225 +["Extras/Serialize/BulletFileLoader/bChunk.cpp"]\
226 +["Extras/Serialize/BulletFileLoader/bDNA.cpp"]\
227 +["Extras/Serialize/BulletFileLoader/bFile.cpp"]\
228 +["Extras/Serialize/BulletFileLoader/btBulletFile.cpp"]\
229 +["Extras/Serialize/BulletWorldImporter/btMultiBodyWorldImporter.cpp"]\
230 +["Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp"]\
231 +["Extras/Serialize/BulletWorldImporter/btWorldImporter.cpp"]\
232 +["Extras/InverseDynamics/CloneTreeCreator.cpp"]\
233 +["Extras/InverseDynamics/IDRandomUtil.cpp"]\
234 +["Extras/InverseDynamics/MultiBodyTreeDebugGraph.cpp"]\
235 +["Extras/InverseDynamics/User2InternalIndex.cpp"]\
236 +["Extras/InverseDynamics/CoilCreator.cpp"]\
237 +["Extras/InverseDynamics/MultiBodyNameMap.cpp"]\
238 +["Extras/InverseDynamics/RandomTreeCreator.cpp"]\
239 +["Extras/InverseDynamics/btMultiBodyTreeCreator.cpp"]\
240 +["Extras/InverseDynamics/DillCreator.cpp"]\
241 +["Extras/InverseDynamics/MultiBodyTreeCreator.cpp"]\
242 +["Extras/InverseDynamics/SimpleTreeCreator.cpp"]\
243 +["Extras/InverseDynamics/invdyn_bullet_comparison.cpp"]\
244 +["src/BulletSoftBody/btDefaultSoftBodySolver.cpp"]\
245 +["src/BulletSoftBody/btSoftBodyHelpers.cpp"]\
246 +["src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp"]\
247 +["src/BulletSoftBody/btSoftBody.cpp"]\
248 +["src/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp"]\
249 +["src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp"]\
250 +["src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp"]\
251 +["src/BulletSoftBody/btSoftMultiBodyDynamicsWorld.cpp"]\
252 +["src/BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp"]\
253 +["src/BulletSoftBody/btDeformableBackwardEulerObjective.cpp"]\
254 +["src/BulletSoftBody/btDeformableBodySolver.cpp"]\
255 +["src/BulletSoftBody/btDeformableContactProjection.cpp"]\
256 +["src/BulletSoftBody/btDeformableContactConstraint.cpp"]\
257 +["src/BulletSoftBody/btDeformableMultiBodyConstraintSolver.cpp"]\
258 +["src/BulletSoftBody/btDeformableMultiBodyDynamicsWorld.cpp"]\
259 +["src/BulletSoftBody/poly34.cpp"]\
260 +["src/BulletSoftBody/BulletReducedDeformableBody/btReducedDeformableBody.cpp"]\
261 +["src/BulletSoftBody/BulletReducedDeformableBody/btReducedDeformableBodyHelpers.cpp"]\
262 +["src/BulletSoftBody/BulletReducedDeformableBody/btReducedDeformableBodySolver.cpp"]\
263 +["src/BulletSoftBody/BulletReducedDeformableBody/btReducedDeformableContactConstraint.cpp"]\
264 +["src/BulletInverseDynamics/IDMath.cpp"]\
265 +["src/BulletInverseDynamics/MultiBodyTree.cpp"]\
266 +["src/BulletInverseDynamics/details/MultiBodyTreeImpl.cpp"]\
267 +["src/BulletInverseDynamics/details/MultiBodyTreeInitCache.cpp"]\
268 +["examples/ThirdPartyLibs/BussIK/Jacobian.cpp"]\
269 +["examples/ThirdPartyLibs/BussIK/LinearR2.cpp"]\
270 +["examples/ThirdPartyLibs/BussIK/LinearR3.cpp"]\
271 +["examples/ThirdPartyLibs/BussIK/LinearR4.cpp"]\
272 +["examples/ThirdPartyLibs/BussIK/MatrixRmn.cpp"]\
273 +["examples/ThirdPartyLibs/BussIK/Misc.cpp"]\
274 +["examples/ThirdPartyLibs/BussIK/Node.cpp"]\
275 +["examples/ThirdPartyLibs/BussIK/Tree.cpp"]\
276 +["examples/ThirdPartyLibs/BussIK/VectorRn.cpp"]\
277 +["examples/ThirdPartyLibs/Gwen/Anim.cpp"]\
278 +["examples/ThirdPartyLibs/Gwen/DragAndDrop.cpp"]\
279 +["examples/ThirdPartyLibs/Gwen/Hook.cpp"]\
280 +["examples/ThirdPartyLibs/Gwen/ToolTip.cpp"]\
281 +["examples/ThirdPartyLibs/Gwen/events.cpp"]\
282 +["examples/ThirdPartyLibs/Gwen/BaseRender.cpp"]\
283 +["examples/ThirdPartyLibs/Gwen/Gwen.cpp"]\
284 +["examples/ThirdPartyLibs/Gwen/Skin.cpp"]\
285 +["examples/ThirdPartyLibs/Gwen/Utility.cpp"]\
286 +["examples/ThirdPartyLibs/Gwen/inputhandler.cpp"]\
287 +["examples/ThirdPartyLibs/Gwen/Controls/Base.cpp"]\
288 +["examples/ThirdPartyLibs/Gwen/Controls/Button.cpp"]\
289 +["examples/ThirdPartyLibs/Gwen/Controls/Canvas.cpp"]\
290 +["examples/ThirdPartyLibs/Gwen/Controls/CheckBox.cpp"]\
291 +["examples/ThirdPartyLibs/Gwen/Controls/ColorControls.cpp"]\
292 +["examples/ThirdPartyLibs/Gwen/Controls/ColorPicker.cpp"]\
293 +["examples/ThirdPartyLibs/Gwen/Controls/ComboBox.cpp"]\
294 +["examples/ThirdPartyLibs/Gwen/Controls/CrossSplitter.cpp"]\
295 +["examples/ThirdPartyLibs/Gwen/Controls/DockBase.cpp"]\
296 +["examples/ThirdPartyLibs/Gwen/Controls/DockedTabControl.cpp"]\
297 +["examples/ThirdPartyLibs/Gwen/Controls/Dragger.cpp"]\
298 +["examples/ThirdPartyLibs/Gwen/Controls/GroupBox.cpp"]\
299 +["examples/ThirdPartyLibs/Gwen/Controls/HSVColorPicker.cpp"]\
300 +["examples/ThirdPartyLibs/Gwen/Controls/HorizontalScrollBar.cpp"]\
301 +["examples/ThirdPartyLibs/Gwen/Controls/ImagePanel.cpp"]\
302 +["examples/ThirdPartyLibs/Gwen/Controls/HorizontalSlider.cpp"]\
303 +["examples/ThirdPartyLibs/Gwen/Controls/Label.cpp"]\
304 +["examples/ThirdPartyLibs/Gwen/Controls/LabelClickable.cpp"]\
305 +["examples/ThirdPartyLibs/Gwen/Controls/ListBox.cpp"]\
306 +["examples/ThirdPartyLibs/Gwen/Controls/MenuItem.cpp"]\
307 +["examples/ThirdPartyLibs/Gwen/Controls/Menu.cpp"]\
308 +["examples/ThirdPartyLibs/Gwen/Controls/MenuStrip.cpp"]\
309 +["examples/ThirdPartyLibs/Gwen/Controls/NumericUpDown.cpp"]\
310 +["examples/ThirdPartyLibs/Gwen/Controls/PanelListPanel.cpp"]\
311 +["examples/ThirdPartyLibs/Gwen/Controls/ProgressBar.cpp"]\
312 +["examples/ThirdPartyLibs/Gwen/Controls/Properties.cpp"]\
313 +["examples/ThirdPartyLibs/Gwen/Controls/RadioButton.cpp"]\
314 +["examples/ThirdPartyLibs/Gwen/Controls/RadioButtonController.cpp"]\
315 +["examples/ThirdPartyLibs/Gwen/Controls/ResizableControl.cpp"]\
316 +["examples/ThirdPartyLibs/Gwen/Controls/Resizer.cpp"]\
317 +["examples/ThirdPartyLibs/Gwen/Controls/RichLabel.cpp"]\
318 +["examples/ThirdPartyLibs/Gwen/Controls/ScrollBar.cpp"]\
319 +["examples/ThirdPartyLibs/Gwen/Controls/ScrollBarBar.cpp"]\
320 +["examples/ThirdPartyLibs/Gwen/Controls/ScrollBarButton.cpp"]\
321 +["examples/ThirdPartyLibs/Gwen/Controls/ScrollControl.cpp"]\
322 +["examples/ThirdPartyLibs/Gwen/Controls/Slider.cpp"]\
323 +["examples/ThirdPartyLibs/Gwen/Controls/SplitterBar.cpp"]\
324 +["examples/ThirdPartyLibs/Gwen/Controls/TabButton.cpp"]\
325 +["examples/ThirdPartyLibs/Gwen/Controls/TabControl.cpp"]\
326 +["examples/ThirdPartyLibs/Gwen/Controls/TabStrip.cpp"]\
327 +["examples/ThirdPartyLibs/Gwen/Controls/Text.cpp"]\
328 +["examples/ThirdPartyLibs/Gwen/Controls/TextBox.cpp"]\
329 +["examples/ThirdPartyLibs/Gwen/Controls/TextBoxNumeric.cpp"]\
330 +["examples/ThirdPartyLibs/Gwen/Controls/TreeControl.cpp"]\
331 +["examples/ThirdPartyLibs/Gwen/Controls/TreeNode.cpp"]\
332 +["examples/ThirdPartyLibs/Gwen/Controls/VerticalScrollBar.cpp"]\
333 +["examples/ThirdPartyLibs/Gwen/Controls/VerticalSlider.cpp"]\
334 +["examples/ThirdPartyLibs/Gwen/Controls/WindowControl.cpp"]\
335 +["examples/ThirdPartyLibs/Gwen/Controls/Dialog/FileOpen.cpp"]\
336 +["examples/ThirdPartyLibs/Gwen/Controls/Dialog/FileSave.cpp"]\
337 +["examples/ThirdPartyLibs/Gwen/Controls/Dialog/Query.cpp"]\
338 +["examples/ThirdPartyLibs/Gwen/Platforms/Null.cpp"]\
339 +["examples/ThirdPartyLibs/Gwen/Platforms/Windows.cpp"]\
340 +["examples/ThirdPartyLibs/Gwen/Renderers/OpenGL_DebugFont.cpp"]\
341 +["Extras/VHACD/test/src/main_vhacd.cpp"] \
342 +["Extras/VHACD/src/VHACD.cpp"] \
343 +["Extras/VHACD/src/vhacdICHull.cpp"] \
344 +["Extras/VHACD/src/vhacdManifoldMesh.cpp"] \
345 +["Extras/VHACD/src/vhacdMesh.cpp"] \
346 +["Extras/VHACD/src/vhacdVolume.cpp"]
349 egl_renderer_sources = \
350 ["examples/SharedMemory/plugins/eglPlugin/eglRendererVisualShapeConverter.cpp"]\
351 +["examples/SharedMemory/plugins/eglPlugin/eglRendererPlugin.cpp"]\
352 +["examples/Importers/ImportColladaDemo/LoadMeshFromCollada.cpp"]\
353 +["examples/Importers/ImportObjDemo/LoadMeshFromObj.cpp"]\
354 +["examples/Importers/ImportMeshUtility/b3ImportMeshUtility.cpp"]\
355 +["examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp"]\
356 +["examples/TinyRenderer/geometry.cpp"]\
357 +["examples/TinyRenderer/model.cpp"]\
358 +["examples/TinyRenderer/tgaimage.cpp"]\
359 +["examples/TinyRenderer/our_gl.cpp"]\
360 +["examples/TinyRenderer/TinyRenderer.cpp"]\
361 +["examples/ThirdPartyLibs/Wavefront/tiny_obj_loader.cpp"]\
362 +["examples/ThirdPartyLibs/stb_image/stb_image.cpp"]\
363 +["examples/ThirdPartyLibs/stb_image/stb_image_write.cpp"]\
364 +["examples/ThirdPartyLibs/tinyxml2/tinyxml2.cpp"]\
365 +["examples/OpenGLWindow/SimpleCamera.cpp"]\
366 +["examples/Utils/b3Clock.cpp"]\
367 +["examples/Utils/b3ResourcePath.cpp"]\
368 +["src/BulletCollision/CollisionShapes/btShapeHull.cpp"]\
369 +["src/BulletCollision/CollisionShapes/btConvexHullShape.cpp"]\
370 +["src/BulletCollision/CollisionShapes/btBoxShape.cpp"]\
371 +["src/BulletCollision/CollisionShapes/btSphereShape.cpp"]\
372 +["src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp"]\
373 +["src/BulletCollision/CollisionShapes/btConvexShape.cpp"]\
374 +["src/BulletCollision/CollisionShapes/btCollisionShape.cpp"]\
375 +["src/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp"]\
376 +["src/BulletCollision/CollisionShapes/btConvexInternalShape.cpp"]\
377 +["src/Bullet3Common/b3Logging.cpp"]\
378 +["src/LinearMath/btAlignedAllocator.cpp"]\
379 +["src/LinearMath/btConvexHull.cpp"]\
380 +["src/LinearMath/btConvexHullComputer.cpp"] \
381 +["src/LinearMath/btGeometryUtil.cpp"]\
382 +["src/LinearMath/btQuickprof.cpp"] \
383 +["src/LinearMath/btThreads.cpp"] \
384 +["src/Bullet3Common/b3AlignedAllocator.cpp"] \
385 +["examples/ThirdPartyLibs/glad/gl.c"]\
386 +["examples/OpenGLWindow/GLInstancingRenderer.cpp"]\
387 +["examples/OpenGLWindow/GLRenderToTexture.cpp"] \
388 +["examples/OpenGLWindow/LoadShader.cpp"]
390 if 'BT_USE_EGL' in CXX_FLAGS:
391 sources += ['examples/ThirdPartyLibs/glad/egl.c']
392 sources += ['examples/OpenGLWindow/EGLOpenGLWindow.cpp']
394 if _platform == "linux" or _platform == "linux2":
395 libraries = ['dl', 'pthread']
396 CXX_FLAGS += '-D_LINUX '
397 CXX_FLAGS += '-DGLEW_STATIC '
398 CXX_FLAGS += '-DGLEW_INIT_OPENGL11_FUNCTIONS=1 '
399 CXX_FLAGS += '-DGLEW_DYNAMIC_LOAD_ALL_GLX_FUNCTIONS=1 '
400 CXX_FLAGS += '-DDYNAMIC_LOAD_X11_FUNCTIONS '
401 CXX_FLAGS += '-DHAS_SOCKLEN_T '
402 CXX_FLAGS += '-fno-inline-functions-called-once '
403 CXX_FLAGS += '-fvisibility=hidden '
404 CXX_FLAGS += '-fvisibility-inlines-hidden '
405 EGL_CXX_FLAGS += '-DBT_USE_EGL '
406 EGL_CXX_FLAGS += '-fPIC ' # for plugins
408 sources = sources + ["examples/ThirdPartyLibs/enet/unix.c"]\
409 +["examples/OpenGLWindow/X11OpenGLWindow.cpp"]\
410 +["examples/ThirdPartyLibs/glad/gl.c"]\
411 +["examples/ThirdPartyLibs/glad/glx.c"]
412 include_dirs += ["examples/ThirdPartyLibs/optionalX11"]
414 if 'BT_USE_EGL' in EGL_CXX_FLAGS:
415 egl_renderer_sources = egl_renderer_sources\
416 +["examples/OpenGLWindow/EGLOpenGLWindow.cpp"]\
417 +['examples/ThirdPartyLibs/glad/egl.c']
419 egl_renderer_sources = egl_renderer_sources\
420 +["examples/OpenGLWindow/X11OpenGLWindow.cpp"]\
421 +["examples/ThirdPartyLibs/glad/glx.c"]
423 elif _platform == "win32":
425 libraries = ['Ws2_32', 'Winmm', 'User32', 'Opengl32', 'kernel32', 'glu32', 'Gdi32', 'Comdlg32']
426 CXX_FLAGS += '-DWIN32 '
427 CXX_FLAGS += '-DGLEW_STATIC '
428 sources = sources + ["examples/ThirdPartyLibs/enet/win32.c"]\
429 +["examples/OpenGLWindow/Win32Window.cpp"]\
430 +["examples/OpenGLWindow/Win32OpenGLWindow.cpp"]\
431 +["examples/ThirdPartyLibs/glad/gl.c"]
432 elif _platform == "darwin":
434 os.environ['LDFLAGS'] = '-framework Cocoa -mmacosx-version-min=10.7 -stdlib=libc++ -framework OpenGL'
435 CXX_FLAGS += '-DB3_NO_PYTHON_FRAMEWORK '
436 CXX_FLAGS += '-DHAS_SOCKLEN_T '
437 CXX_FLAGS += '-D_DARWIN '
438 # CXX_FLAGS += '-framework Cocoa '
439 sources = sources + ["examples/ThirdPartyLibs/enet/unix.c"]\
440 +["examples/OpenGLWindow/MacOpenGLWindow.cpp"]\
441 +["examples/ThirdPartyLibs/glad/gl.c"]\
442 +["examples/OpenGLWindow/MacOpenGLWindowObjC.m"]
445 libraries = ['GL', 'GLEW', 'pthread']
446 os.environ['LDFLAGS'] = '-L/usr/X11R6/lib'
447 CXX_FLAGS += '-D_BSD '
448 CXX_FLAGS += '-I/usr/X11R6/include '
449 CXX_FLAGS += '-DHAS_SOCKLEN_T '
450 CXX_FLAGS += '-fno-inline-functions-called-once'
451 sources = ["examples/ThirdPartyLibs/enet/unix.c"]\
452 +["examples/OpenGLWindow/X11OpenGLWindow.cpp"]\
453 +["examples/ThirdPartyLibs/glad/gl.c"]\
456 setup_py_dir = os.path.dirname(os.path.realpath(__file__))
459 datadir = "examples/pybullet/gym/pybullet_data"
461 hh = setup_py_dir + "/" + datadir
463 for root, dirs, files in os.walk(hh):
465 ext = os.path.splitext(fn)[1][1:]
466 if ext and ext in 'yaml index meta data-00000-of-00001 png gif jpg urdf sdf obj txt mtl dae off stl STL xml gin npy '.split(
469 need_files.append(fn[1 + len(hh):])
471 print("found resource files: %i" % len(need_files))
475 print(find_packages('examples/pybullet/gym'))
480 pybullet_ext = Extension(
484 extra_compile_args=CXX_FLAGS.split(),
485 include_dirs=include_dirs + [
486 "src", "examples/ThirdPartyLibs", "examples/ThirdPartyLibs/glad",
487 "examples/ThirdPartyLibs/enet/include", "examples/ThirdPartyLibs/clsocket/src",
488 "Extras/VHACD/inc", "Extras/VHACD/public",
490 extensions.append(pybullet_ext)
492 if 'BT_USE_EGL' in EGL_CXX_FLAGS:
494 eglRender = Extension(
496 sources=egl_renderer_sources,
498 extra_compile_args=(CXX_FLAGS + EGL_CXX_FLAGS).split(),
499 include_dirs=include_dirs + [
500 "src", "examples", "examples/ThirdPartyLibs", "examples/ThirdPartyLibs/glad",
501 "examples/ThirdPartyLibs/enet/include", "examples/ThirdPartyLibs/clsocket/src"
504 extensions.append(eglRender)
510 'Official Python Interface for the Bullet Physics SDK specialized for Robotics Simulation and Reinforcement Learning',
512 'pybullet is an easy to use Python module for physics simulation, robotics and deep reinforcement learning based on the Bullet Physics SDK. With pybullet you can load articulated bodies from URDF, SDF and other file formats. pybullet provides forward dynamics simulation, inverse dynamics computation, forward and inverse kinematics and collision detection and ray intersection queries. Aside from physics simulation, pybullet supports to rendering, with a CPU renderer and OpenGL visualization and support for virtual reality headsets.',
513 url='https://github.com/bulletphysics/bullet3',
514 author='Erwin Coumans, Yunfei Bai, Jasmine Hsu',
515 author_email='erwincoumans@google.com',
519 'game development', 'virtual reality', 'physics simulation', 'robotics',
520 'collision detection', 'opengl'
522 ext_modules=extensions,
524 'Development Status :: 5 - Production/Stable',
525 'License :: OSI Approved :: zlib/libpng License',
526 'Operating System :: Microsoft :: Windows', 'Operating System :: POSIX :: Linux',
527 'Operating System :: MacOS', 'Intended Audience :: Science/Research',
528 "Programming Language :: Python", 'Programming Language :: Python :: 2.7',
529 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5',
530 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7',
531 'Programming Language :: Python :: 3.8', 'Topic :: Games/Entertainment :: Simulation',
532 'Topic :: Scientific/Engineering :: Artificial Intelligence',
533 'Framework :: Robot Framework'
535 package_dir={'': 'examples/pybullet/gym'},
536 packages=[x for x in find_packages('examples/pybullet/gym')],
537 package_data={'pybullet_data': need_files})