diff --git a/ballisticacore-cmake/.idea/.gitignore b/ballisticacore-cmake/.idea/.gitignore
new file mode 100644
index 00000000..0e40fe8f
--- /dev/null
+++ b/ballisticacore-cmake/.idea/.gitignore
@@ -0,0 +1,3 @@
+
+# Default ignored files
+/workspace.xml
\ No newline at end of file
diff --git a/ballisticacore-cmake/.idea/.name b/ballisticacore-cmake/.idea/.name
new file mode 100644
index 00000000..5aa978d3
--- /dev/null
+++ b/ballisticacore-cmake/.idea/.name
@@ -0,0 +1 @@
+BallisticaCore
\ No newline at end of file
diff --git a/ballisticacore-cmake/.idea/ballisticacore-cmake.iml b/ballisticacore-cmake/.idea/ballisticacore-cmake.iml
new file mode 100644
index 00000000..f08604bb
--- /dev/null
+++ b/ballisticacore-cmake/.idea/ballisticacore-cmake.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/ballisticacore-cmake/.idea/codeStyles/Project.xml b/ballisticacore-cmake/.idea/codeStyles/Project.xml
new file mode 100644
index 00000000..249efa28
--- /dev/null
+++ b/ballisticacore-cmake/.idea/codeStyles/Project.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ballisticacore-cmake/.idea/codeStyles/codeStyleConfig.xml b/ballisticacore-cmake/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 00000000..79ee123c
--- /dev/null
+++ b/ballisticacore-cmake/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml
new file mode 100644
index 00000000..ab5debaa
--- /dev/null
+++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml
@@ -0,0 +1,807 @@
+
+
+
+ NOMINMAX
+ aabb
+ abcdefghijklmnopqrstuvwxyz
+ accel
+ achs
+ acinstance
+ ack'ed
+ acked
+ acks
+ aclass
+ aclass's
+ addrs
+ adjoint
+ adreno
+ affx
+ affy
+ affz
+ aftx
+ afty
+ aftz
+ aint
+ airborn
+ alext
+ alibaba
+ allocs
+ alot
+ alphaimg
+ alphapixels
+ alsa
+ alsoft
+ animcurve
+ aniso
+ apientry
+ appconfig
+ asci
+ athome
+ attrobj
+ automagically
+ autoselect
+ avel
+ avels
+ axismotion
+ backgrounded
+ backgrounding
+ backtraces
+ ballistica
+ ballisticacore
+ barebones
+ basetype
+ basicsize
+ bastd
+ bbbb
+ bbbbb
+ bbbbbb
+ bbbbbbb
+ bcfn
+ bezanson
+ bgra
+ bigendian
+ bilinear
+ binpow
+ bitcount
+ bitdepth
+ bitlength
+ bitmask
+ bitpos
+ bitval
+ blitters
+ blitting
+ blockadr
+ blockheight
+ blockwidth
+ bluetooth
+ blurscale
+ bodyid
+ bodypart
+ bodyptr
+ bookmarkable
+ bools
+ boolval
+ boostrapping
+ bootstrappy
+ bouyancy
+ bppv
+ bresult
+ bridgit
+ broadcom
+ bsac
+ bscfg
+ bsgaps
+ bsgdps
+ bsivu
+ bsmhi
+ bsstd
+ bsuuid
+ bufs
+ buildconfig
+ buildnumber
+ buttondown
+ buttonmouse
+ buttonup
+ buttonwidget
+ bwst
+ calced
+ calcs
+ caled
+ callargs
+ callbackobj
+ camalign
+ camelback
+ camerashake
+ capitan
+ cargs
+ ccontext
+ centiseconds
+ cfgdir
+ changeme
+ charn
+ charnum
+ charstr
+ checkboxwidget
+ chrono
+ cjief
+ classdict
+ clientinfo
+ cmath
+ cmds
+ cmdvals
+ codewarrior
+ codewarrior's
+ cofnodes
+ collapseable
+ collidable
+ columnwidget
+ connectattr
+ containerwidget
+ controlfp
+ cooldown
+ coreaudio
+ coulda
+ cout
+ cpel
+ cpplint
+ cptr
+ cpuid
+ crom
+ crosswire
+ crvel
+ cspr
+ cstdint
+ cstdlib
+ cstring
+ ctargetref
+ cubemap
+ curtime
+ cutef
+ cvar
+ data
+ datadata
+ dataout
+ datas
+ datav
+ datavec
+ dbias
+ dcol
+ ddcaps
+ ddpf
+ ddpixelformat
+ ddscaps
+ ddsd
+ ddsx
+ deallocated
+ deallocation
+ deek
+ deinit
+ demangle
+ demangled
+ demangling
+ denom
+ dernit
+ dets
+ dfff
+ dfmt
+ diffbit
+ dirslash
+ dlfcn
+ dlife
+ dname
+ dncm
+ dobell
+ doraise
+ dosomething
+ dout
+ downsample
+ dpad
+ dpads
+ drpt
+ dsize
+ dsound
+ dstattr
+ dstnode
+ dstr
+ dtest
+ dummyvalid
+ dxgi
+ dynamicdata
+ echidna
+ edef
+ elems
+ elevenbase
+ elevenbits
+ emitfx
+ emojis
+ endcall
+ endl
+ endline
+ endtime
+ entrypoint
+ ericf
+ ericsson
+ erroring
+ etcdec
+ etcpack
+ evals
+ ewww
+ ewwww
+ ewwwww
+ execinfo
+ expbool
+ expl
+ extrahash
+ extrascale
+ exts
+ facepts
+ farval
+ fbos
+ fdata
+ fdirx
+ fdiry
+ fdirz
+ fenv
+ fesetround
+ ffff
+ ffffff
+ fffffff
+ fffffffffifff
+ fgets
+ fifteenbits
+ fjco
+ fjcoiwef
+ flipbit
+ flopsy
+ fname
+ fnode
+ fnumc
+ fopen
+ fourcc
+ fovs
+ fovx
+ fovy
+ framebuffers
+ framedef
+ frameldefs
+ framerates
+ fread
+ freeform
+ freeifaddrs
+ freqs
+ froemling
+ frompos
+ frontmost
+ ftos
+ ftou
+ funcname
+ fval
+ fvals
+ gamecenter
+ gamedata
+ gamepacket
+ gamepackets
+ gameplay
+ gapless
+ gasmsg
+ gbus
+ gcc's
+ gearvr
+ getactivity
+ getattro
+ getattrofunc
+ getbasetime
+ getbit
+ getbits
+ getbitshigh
+ getcollidemodel
+ getdata
+ getifaddrs
+ getline
+ getmodel
+ getnodes
+ getnodetype
+ getsession
+ getsound
+ gettexture
+ gettotalrefcount
+ gles
+ glext
+ gpgs
+ gqualstr
+ grav
+ gstate
+ gthm
+ guiddef
+ gusl
+ gvrrts
+ hacky
+ haha
+ halign
+ handlemessage
+ hatmotion
+ havn't
+ havnt
+ healthcare
+ hexval
+ highp
+ highquality
+ hitchy
+ hmmm
+ hostcmd
+ hostinfo
+ hotkeys
+ hotplug
+ hscrollwidget
+ htonf
+ htonl
+ htons
+ ibuf
+ icloud
+ iconscale
+ ieeefp
+ ifaddr
+ ifaddrs
+ ifdebug
+ iiiiisss
+ ilock
+ imagewidget
+ incentivized
+ inet
+ initguid
+ inittab
+ intercollide
+ internalformat
+ interuptions
+ invote
+ iserverget
+ iserverput
+ isn'
+ isutf
+ itemsize
+ itsclass
+ itunes
+ ival
+ ivals
+ ized
+ jacobian
+ janktastic
+ janky
+ jaxis
+ jcjwf
+ jmessage
+ keepalives
+ keycode
+ keysyms
+ keywds
+ khronos
+ kickable
+ kickee
+ killable
+ killcount
+ kmod
+ kronk
+ kwds
+ kxyz
+ lantinga
+ largeish
+ lasti
+ lastline
+ leaderboard
+ leaderboards
+ lgui
+ lhalf
+ libutf
+ lightshad
+ linearsize
+ listobj
+ llock
+ logpath
+ logput
+ lorient
+ lowp
+ lpos
+ lpsockaddr
+ lrintf
+ lscope
+ lstr
+ lsync
+ lvec
+ lvoid
+ macos
+ magoogan
+ magua
+ mainmenu
+ mallocs
+ maskhigh
+ maskuv
+ maximus
+ maxwidth
+ mediump
+ memalign
+ memchr
+ memcpy
+ meshdata
+ meth
+ mikirog
+ millisecs
+ minelem
+ minsdl
+ mipmapcount
+ mipmaps
+ mmdevapi
+ modder
+ modelview
+ moduletype
+ momemtary
+ msaa
+ mult
+ multing
+ multipass
+ multisample
+ mutli
+ mybuf
+ mycallback
+ mynode
+ mywidget
+ ndebug
+ nearval
+ needwindow
+ negativex
+ negativey
+ negativez
+ nemanja
+ ness
+ netclient
+ netplay
+ newchild
+ newimg
+ newitem
+ newnode
+ nextchar
+ nitpicky
+ nlpos
+ nmemb
+ nodetype
+ nominmax
+ noninfringement
+ nonlint
+ noone
+ nothin
+ nptr
+ nsize
+ ntoa
+ ntohl
+ numargs
+ numc
+ numentries
+ nvidia
+ nyffenegger
+ objexists
+ objid
+ obvs
+ oculus
+ oiffsss
+ oooo
+ ooooooo
+ ooooooooo
+ oooooooooooo
+ ooooooooooooo
+ ooooooooooooooo
+ oooooooooooooooooo
+ ooooooooooooooooooooooooooooooo
+ ooooooooooooooooooooooooooooooooooo
+ ooooooooooooooooooooooooooooooooooooo
+ openal
+ opengl
+ opensl
+ opmode
+ ortho
+ osis
+ osssssssssss
+ ostype
+ ourself
+ ourstanding
+ ouya
+ parameteriv
+ passcode
+ pausable
+ pdst
+ persp
+ pflag
+ pflags
+ pgmout
+ pixelformat
+ playpause
+ playsound
+ plen
+ pname
+ podcast
+ podcasts
+ portaudio
+ positivex
+ positivey
+ positivez
+ powerup
+ precalc
+ predeclare
+ prefs
+ preloaded
+ preloads
+ premult
+ printf
+ printnodes
+ printobjects
+ priv
+ profilers
+ prog
+ proj
+ prolly
+ psmx
+ pspec
+ psps
+ psrc
+ pton
+ ptrs
+ ptype
+ pulseaudio
+ punchmomentumlinear
+ punchthrough
+ pushcall
+ putbits
+ putbitshigh
+ pval
+ pvrtc
+ pycommand
+ pyconfig
+ pycontext
+ pyhome
+ pylib
+ pyobj
+ pyobjs
+ qerr
+ qrcode
+ qrel
+ qual
+ qualcomm
+ radiusm
+ raii
+ rasterizer
+ reaaaly
+ readset
+ realloc
+ reallocations
+ realtimers
+ recalc
+ recvfrom
+ redundants
+ refcounted
+ refl
+ rehel
+ rendererdata
+ renormalize
+ rené
+ reprfunc
+ resends
+ resync
+ retval
+ rezing
+ rgui
+ richcompare
+ rigth
+ rootwidget
+ rowwidget
+ rresult
+ rsgc
+ runnables
+ rvec
+ rvel
+ safecolor
+ scenetime
+ screenmessage
+ scrollwidget
+ sdl's
+ sdlk
+ seqlen
+ serv
+ serverget
+ serverput
+ sessiondata
+ sessionglobals
+ sessiontype
+ setattro
+ setattrofunc
+ setschedparam
+ sgis
+ sharedobj
+ shifthigh
+ shouldnt
+ shufflable
+ signsubscale
+ simd
+ sisssssssss
+ sixteenbits
+ smoothering
+ smoothstep
+ sndio
+ snorm
+ sockaddr
+ soffs
+ solaris
+ spaz
+ spead
+ sphrand
+ srcattr
+ srcsz
+ sresult
+ sscanf
+ ssize
+ sssi
+ sssisisis
+ sssissss
+ ssss
+ sssss
+ sssssi
+ sssssss
+ sssssssd
+ sssssssi
+ ssssssssssss
+ standin
+ startpos
+ starttime
+ startx
+ starty
+ staticdata
+ stdint
+ stephane
+ stepnum
+ stepsize
+ strcasecmp
+ strchr
+ strcpy
+ strdup
+ stringi
+ strlen
+ strtof
+ subclsssing
+ subentities
+ subitems
+ subplatform
+ subscale
+ sval
+ symbolification
+ syscalls
+ talloc
+ tegra
+ telefonaktiebolaget
+ teleported
+ teleporting
+ tempvec
+ texel
+ texqualstr
+ textcolor
+ textwidget
+ thang
+ thecommand
+ theres
+ threadname
+ threadtype
+ tiltage
+ timedisplay
+ timeformat
+ timerlist
+ timestep
+ timetype
+ timetypes
+ tmpmat
+ tomer
+ topos
+ touchpad
+ toucs
+ toutf
+ trackpad
+ trackpads
+ tradeoff
+ trailcolor
+ transobj
+ treturn
+ trifunovic
+ trilinear
+ trimesh
+ trimeshes
+ tval
+ tvos
+ tweakage
+ twotimer
+ twst
+ typeobj
+ typestr
+ uber
+ uibounds
+ uiid
+ uncas
+ unchecking
+ underrun
+ unformatted
+ unichar
+ unichars
+ uninited
+ unmanaged
+ unpaused
+ unplayed
+ unpremultiply
+ unsignaled
+ unstuff
+ unsynchronized
+ userspace
+ uther
+ uuids
+ uxxxx
+ uxxxxxxxx
+ valign
+ valobj
+ vals
+ valtab
+ valuedouble
+ valueint
+ valuestring
+ varyings
+ vbos
+ vbuf
+ vdynamic
+ verts
+ vidia
+ vmag
+ vorbis
+ vparallel
+ vprintf
+ vsync
+ vsyncing
+ vtable
+ vtangential
+ vulkan
+ waaah
+ wack
+ wakeups
+ walisser
+ wasdebug
+ watte
+ wdeprecated
+ weakref
+ welp
+ whaaaaaaa
+ wheee
+ wheeee
+ wiimote
+ wiimotes
+ windowshade
+ winmm
+ winsock
+ wofocj
+ wonkiness
+ worldspace
+ wunused
+ xclamped
+ xdiff
+ xdist
+ xinput
+ xmax
+ xmin
+ xmmintrin
+ xoffset
+ yclamped
+ ydiff
+ ydist
+ ymax
+ ymin
+ yoffs
+ yooooooo
+ zmax
+ zmin
+ zoffset
+ zomg
+ zoomable
+ zrot
+
+
+
\ No newline at end of file
diff --git a/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml b/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 00000000..3f259067
--- /dev/null
+++ b/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ballisticacore-cmake/.idea/misc.xml b/ballisticacore-cmake/.idea/misc.xml
new file mode 100644
index 00000000..acadce39
--- /dev/null
+++ b/ballisticacore-cmake/.idea/misc.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ballisticacore-cmake/.idea/modules.xml b/ballisticacore-cmake/.idea/modules.xml
new file mode 100644
index 00000000..5fb34ea8
--- /dev/null
+++ b/ballisticacore-cmake/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ballisticacore-cmake/.idea/vcs.xml b/ballisticacore-cmake/.idea/vcs.xml
new file mode 100644
index 00000000..6c0b8635
--- /dev/null
+++ b/ballisticacore-cmake/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ballisticacore-cmake/CMakeLists.txt b/ballisticacore-cmake/CMakeLists.txt
new file mode 100644
index 00000000..fc1dd9f2
--- /dev/null
+++ b/ballisticacore-cmake/CMakeLists.txt
@@ -0,0 +1,743 @@
+cmake_minimum_required(VERSION 3.5)
+project(BallisticaCore)
+include(CheckIncludeFile)
+option(HEADLESS "build headless server" OFF)
+option(TEST_BUILD "include testing features" OFF)
+
+# Requiring minimum of C++14 currently.
+set(CMAKE_CXX_STANDARD 14)
+
+# Currently we need to nudge cmake a bit to get it to find homebrew python;
+# Sounds like this is a known issue at the moment.
+if (APPLE)
+ # NOTE: after installing mojave, cmake stopped building against homebrew
+ # stuff correctly (/usr/local/*). Xcode 10 release notes mention /usr/include
+ # is no longer filled in by the dev tools and perhaps this is related.
+ # see https://developer.apple.com/documentation
+ # /xcode_release_notes/xcode_10_release_notes
+ # anyway, forcing the issue for now; can keep an eye on developments..
+ include_directories("/usr/local/include")
+ link_directories("/usr/local/lib")
+
+ execute_process(COMMAND "python3-config" "--prefix"
+ OUTPUT_VARIABLE PYPREFIX
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ # running into an oddity where python-libs linking reverts back
+ # to our system default after a while - trying cache-internal here to fix
+ set(PYTHON_LIBRARY "${PYPREFIX}/lib/libpython3.7m.dylib" CACHE INTERNAL "")
+ set(PYTHON_INCLUDE_DIR "${PYPREFIX}/include/python3.7m" CACHE INTERNAL "")
+endif ()
+# NOTE: we technically require 3.7 at this point, but leaving this
+# at 3.5 in order to keep build pipeline functioning on things
+# like raspberry pi even though the game won't function there until
+# 3.7 comes down the pipe.
+find_package(PythonLibs 3.5 REQUIRED)
+
+if (NOT HEADLESS)
+ find_package(SDL2 QUIET)
+ if (SDL2_FOUND)
+ # getting complaint about space at the end of this on ubuntu16
+ string(STRIP ${SDL2_LIBRARIES} SDL2_LIBRARIES)
+ else ()
+ # some cmake systems don't have the SDL2 module; lets
+ # fall back to quasi-manual search if so..
+ # (enough to cover ubuntu 14 and raspbian)
+ message(STATUS "No SDL2 module present; searching manually")
+ find_library(SDL2_LIBRARIES SDL2)
+ if (NOT SDL2_LIBRARIES)
+ message(FATAL_ERROR "SDL2 library not found")
+ endif ()
+ set(SDL2_INCLUDE_DIRS "/usr/include/SDL2")
+ endif ()
+ find_package(OpenGL REQUIRED)
+ find_package(OpenAL REQUIRED)
+ if (APPLE)
+ # on mac this sets an include path that we don't need since
+ # we're using the system framework... clean it up
+ set(OPENAL_INCLUDE_DIR "")
+ endif ()
+ find_library(OGG_LIBRARY ogg)
+ find_library(VORBISFILE_LIBRARY vorbisfile)
+ if (NOT OGG_LIBRARY)
+ message(FATAL_ERROR "ogg library not found")
+ endif ()
+ if (NOT VORBISFILE_LIBRARY)
+ message(FATAL_ERROR "vorbisfile library not found")
+ endif ()
+ set(EXTRA_INCLUDE_DIRS ${OPENGL_INCLUDE_DIRS}
+ ${OPENAL_INCLUDE_DIR} ${SDL2_INCLUDE_DIRS})
+ set(EXTRA_LIBRARIES ogg vorbisfile ${OPENGL_LIBRARIES} ${OPENAL_LIBRARY})
+else ()
+ add_definitions(-DBA_HEADLESS_BUILD=1)
+endif ()
+
+if (TEST_BUILD)
+ add_definitions(-DBA_TEST_BUILD=1)
+endif ()
+
+# Currently seeing warnings about parateter order changing in GCC 7.1
+# on Raspberry Pi builds. We never need to care about C++ abi compatability
+# so silencing them. Can maybe remove this later if they stop.
+if (CMAKE_COMPILER_IS_GNUCXX)
+ set(CMAKE_CXX_FLAGS
+ "${CMAKE_CXX_FLAGS} -Wno-psabi")
+endif()
+
+# message("GOT LIBS ${PYTHON_LIBRARIES}")
+# message("GOT INC DIRS ${PYTHON_INCLUDE_DIRS}")
+# message("GOT SDL INC ${SDL2_INCLUDE_DIRS}")
+# message(FATAL_ERROR "SO FAR SO GOOD")
+
+# get_filename_component(BA_SRC_ROOT ../src ABSOLUTE )
+# include_directories("src")
+set(BA_SRC_ROOT src)
+include_directories(${BA_SRC_ROOT})
+add_compile_options(-include ballistica/config/config_cmake.h)
+
+if (CMAKE_BUILD_TYPE MATCHES Debug)
+ add_definitions(-DBA_DEBUG_BUILD=1)
+endif ()
+
+set(ODE_SRC_ROOT ${BA_SRC_ROOT}/external/open_dynamics_engine-ef)
+
+add_library(ode
+ ${ODE_SRC_ROOT}/ode/IceAABB.cpp
+ ${ODE_SRC_ROOT}/ode/IceContainer.cpp
+ ${ODE_SRC_ROOT}/ode/IceHPoint.cpp
+ ${ODE_SRC_ROOT}/ode/IceIndexedTriangle.cpp
+ ${ODE_SRC_ROOT}/ode/IceMatrix3x3.cpp
+ ${ODE_SRC_ROOT}/ode/IceMatrix4x4.cpp
+ ${ODE_SRC_ROOT}/ode/IceOBB.cpp
+ ${ODE_SRC_ROOT}/ode/IcePlane.cpp
+ ${ODE_SRC_ROOT}/ode/IcePoint.cpp
+ ${ODE_SRC_ROOT}/ode/IceRandom.cpp
+ ${ODE_SRC_ROOT}/ode/IceRay.cpp
+ ${ODE_SRC_ROOT}/ode/IceRevisitedRadix.cpp
+ ${ODE_SRC_ROOT}/ode/IceSegment.cpp
+ ${ODE_SRC_ROOT}/ode/IceTriangle.cpp
+ ${ODE_SRC_ROOT}/ode/IceUtils.cpp
+ ${ODE_SRC_ROOT}/ode/ode.cpp
+ ${ODE_SRC_ROOT}/ode/ode_array.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_cylinder_box.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_cylinder_plane.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_cylinder_sphere.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_cylinder_trimesh.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_kernel.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_quadtreespace.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_sapspace.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_space.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_std.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_transform.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_trimesh.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_trimesh_box.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_trimesh_ccylinder.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_trimesh_distance.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_trimesh_plane.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_trimesh_ray.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_trimesh_sphere.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_trimesh_trimesh.cpp
+ ${ODE_SRC_ROOT}/ode/ode_collision_util.cpp
+ ${ODE_SRC_ROOT}/ode/ode_error.cpp
+ ${ODE_SRC_ROOT}/ode/ode_export-diff.cpp
+ ${ODE_SRC_ROOT}/ode/ode_fastdot.cpp
+ ${ODE_SRC_ROOT}/ode/ode_fastldlt.cpp
+ ${ODE_SRC_ROOT}/ode/ode_fastlsolve.cpp
+ ${ODE_SRC_ROOT}/ode/ode_fastltsolve.cpp
+ ${ODE_SRC_ROOT}/ode/ode_joint.cpp
+ ${ODE_SRC_ROOT}/ode/ode_lcp.cpp
+ ${ODE_SRC_ROOT}/ode/ode_mass.cpp
+ ${ODE_SRC_ROOT}/ode/ode_mat.cpp
+ ${ODE_SRC_ROOT}/ode/ode_math.cpp
+ ${ODE_SRC_ROOT}/ode/ode_matrix.cpp
+ ${ODE_SRC_ROOT}/ode/ode_memory.cpp
+ ${ODE_SRC_ROOT}/ode/ode_misc.cpp
+ ${ODE_SRC_ROOT}/ode/ode_obstack.cpp
+ ${ODE_SRC_ROOT}/ode/ode_quickstep.cpp
+ ${ODE_SRC_ROOT}/ode/ode_rotation.cpp
+ ${ODE_SRC_ROOT}/ode/ode_step.cpp
+ ${ODE_SRC_ROOT}/ode/ode_stepfast.cpp
+ ${ODE_SRC_ROOT}/ode/ode_timer.cpp
+ ${ODE_SRC_ROOT}/ode/ode_util.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_AABBCollider.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_AABBTree.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_BaseModel.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_BoxPruning.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_Collider.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_HybridModel.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_LSSCollider.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_MeshInterface.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_Model.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_OBBCollider.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_OptimizedTree.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_PlanesCollider.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_RayCollider.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_SphereCollider.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_SweepAndPrune.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_TreeBuilders.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_TreeCollider.cpp
+ ${ODE_SRC_ROOT}/ode/OPC_VolumeCollider.cpp
+ ${ODE_SRC_ROOT}/ode/Opcode.cpp
+ )
+target_include_directories(ode PRIVATE ${ODE_SRC_ROOT})
+
+# EWWW; GCC gives us bad mesh collisions with -O3 (and maybe -O2)
+# need to finally get to the bottom of this but limiting to -01 for now.
+# (-O2 might be safe??... or what about -Os? Should test again.)
+if (CMAKE_BUILD_TYPE MATCHES Release)
+ target_compile_options(ode PRIVATE -O1)
+endif ()
+
+
+# MakeBob binary.
+
+add_executable(make_bob
+ ${BA_SRC_ROOT}/tools/make_bob/make_bob.cc
+ ${BA_SRC_ROOT}/ballistica/core/exception.cc
+ ${BA_SRC_ROOT}/tools/make_bob/tri_optimization/ls_vcache_opt.cc
+ )
+target_include_directories(make_bob PRIVATE
+ ${BA_SRC_ROOT}/tools/make_bob
+ ${BA_SRC_ROOT}/external/open_dynamics_engine-ef)
+
+
+# BallisticaCore binary.
+
+add_executable(ballisticacore
+ ${BA_SRC_ROOT}/external/qrencode-3.4.4/qrencode/bitstream.c
+ ${BA_SRC_ROOT}/external/qrencode-3.4.4/qrencode/mask.c
+ ${BA_SRC_ROOT}/external/qrencode-3.4.4/qrencode/mmask.c
+ ${BA_SRC_ROOT}/external/qrencode-3.4.4/qrencode/mqrspec.c
+ ${BA_SRC_ROOT}/external/qrencode-3.4.4/qrencode/qrencode.c
+ ${BA_SRC_ROOT}/external/qrencode-3.4.4/qrencode/qrinput.c
+ ${BA_SRC_ROOT}/external/qrencode-3.4.4/qrencode/qrspec.c
+ ${BA_SRC_ROOT}/external/qrencode-3.4.4/qrencode/rscode.c
+ ${BA_SRC_ROOT}/external/qrencode-3.4.4/qrencode/split.c
+ #AUTOGENERATED_BEGIN (this section is managed by the "update_project" tool)
+ ${BA_SRC_ROOT}/ballistica/app/app.cc
+ ${BA_SRC_ROOT}/ballistica/app/app.h
+ ${BA_SRC_ROOT}/ballistica/app/app_config.cc
+ ${BA_SRC_ROOT}/ballistica/app/app_config.h
+ ${BA_SRC_ROOT}/ballistica/app/app_globals.cc
+ ${BA_SRC_ROOT}/ballistica/app/app_globals.h
+ ${BA_SRC_ROOT}/ballistica/app/headless_app.cc
+ ${BA_SRC_ROOT}/ballistica/app/headless_app.h
+ ${BA_SRC_ROOT}/ballistica/app/stress_test.cc
+ ${BA_SRC_ROOT}/ballistica/app/stress_test.h
+ ${BA_SRC_ROOT}/ballistica/audio/al_sys.cc
+ ${BA_SRC_ROOT}/ballistica/audio/al_sys.h
+ ${BA_SRC_ROOT}/ballistica/audio/audio.cc
+ ${BA_SRC_ROOT}/ballistica/audio/audio.h
+ ${BA_SRC_ROOT}/ballistica/audio/audio_server.cc
+ ${BA_SRC_ROOT}/ballistica/audio/audio_server.h
+ ${BA_SRC_ROOT}/ballistica/audio/audio_source.cc
+ ${BA_SRC_ROOT}/ballistica/audio/audio_source.h
+ ${BA_SRC_ROOT}/ballistica/audio/audio_streamer.cc
+ ${BA_SRC_ROOT}/ballistica/audio/audio_streamer.h
+ ${BA_SRC_ROOT}/ballistica/audio/ogg_stream.cc
+ ${BA_SRC_ROOT}/ballistica/audio/ogg_stream.h
+ ${BA_SRC_ROOT}/ballistica/ballistica.cc
+ ${BA_SRC_ROOT}/ballistica/ballistica.h
+ ${BA_SRC_ROOT}/ballistica/config/config_android_amazon.h
+ ${BA_SRC_ROOT}/ballistica/config/config_android_cardboard.h
+ ${BA_SRC_ROOT}/ballistica/config/config_android_common.h
+ ${BA_SRC_ROOT}/ballistica/config/config_android_demo.h
+ ${BA_SRC_ROOT}/ballistica/config/config_android_generic.h
+ ${BA_SRC_ROOT}/ballistica/config/config_android_google.h
+ ${BA_SRC_ROOT}/ballistica/config/config_android_oculus.h
+ ${BA_SRC_ROOT}/ballistica/config/config_android_template.h
+ ${BA_SRC_ROOT}/ballistica/config/config_cmake.h
+ ${BA_SRC_ROOT}/ballistica/config/config_common.h
+ ${BA_SRC_ROOT}/ballistica/config/config_windows_common.h
+ ${BA_SRC_ROOT}/ballistica/config/config_windows_generic.h
+ ${BA_SRC_ROOT}/ballistica/config/config_windows_headless.h
+ ${BA_SRC_ROOT}/ballistica/config/config_windows_oculus.h
+ ${BA_SRC_ROOT}/ballistica/config/config_xcode_common.h
+ ${BA_SRC_ROOT}/ballistica/config/config_xcode_ios.h
+ ${BA_SRC_ROOT}/ballistica/config/config_xcode_ios_legacy.h
+ ${BA_SRC_ROOT}/ballistica/config/config_xcode_mac.h
+ ${BA_SRC_ROOT}/ballistica/config/config_xcode_mac_headless_legacy.h
+ ${BA_SRC_ROOT}/ballistica/config/config_xcode_mac_legacy.h
+ ${BA_SRC_ROOT}/ballistica/config/config_xcode_tvos.h
+ ${BA_SRC_ROOT}/ballistica/core/context.cc
+ ${BA_SRC_ROOT}/ballistica/core/context.h
+ ${BA_SRC_ROOT}/ballistica/core/exception.cc
+ ${BA_SRC_ROOT}/ballistica/core/exception.h
+ ${BA_SRC_ROOT}/ballistica/core/inline.cc
+ ${BA_SRC_ROOT}/ballistica/core/inline.h
+ ${BA_SRC_ROOT}/ballistica/core/logging.cc
+ ${BA_SRC_ROOT}/ballistica/core/logging.h
+ ${BA_SRC_ROOT}/ballistica/core/macros.cc
+ ${BA_SRC_ROOT}/ballistica/core/macros.h
+ ${BA_SRC_ROOT}/ballistica/core/module.cc
+ ${BA_SRC_ROOT}/ballistica/core/module.h
+ ${BA_SRC_ROOT}/ballistica/core/object.cc
+ ${BA_SRC_ROOT}/ballistica/core/object.h
+ ${BA_SRC_ROOT}/ballistica/core/thread.cc
+ ${BA_SRC_ROOT}/ballistica/core/thread.h
+ ${BA_SRC_ROOT}/ballistica/core/types.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_draw_snapshot.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_fuse.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_fuse.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_fuse_data.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_height_cache.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_height_cache.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_server.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_server.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_shadow.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_shadow.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_shadow_data.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_volume_light.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_volume_light.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/bg/bg_dynamics_volume_light_data.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/collision.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/collision_cache.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/collision_cache.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/dynamics.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/dynamics.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/impact_sound_material_action.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/impact_sound_material_action.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/material.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/material.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/material_action.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/material_component.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/material_component.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/material_condition_node.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/material_condition_node.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/material_context.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/material_context.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/node_message_material_action.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/node_message_material_action.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/node_mod_material_action.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/node_mod_material_action.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/node_user_message_material_action.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/node_user_message_material_action.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/part_mod_material_action.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/part_mod_material_action.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/python_call_material_action.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/python_call_material_action.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/roll_sound_material_action.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/roll_sound_material_action.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/skid_sound_material_action.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/skid_sound_material_action.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/sound_material_action.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/material/sound_material_action.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/part.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/part.h
+ ${BA_SRC_ROOT}/ballistica/dynamics/rigid_body.cc
+ ${BA_SRC_ROOT}/ballistica/dynamics/rigid_body.h
+ ${BA_SRC_ROOT}/ballistica/game/account.cc
+ ${BA_SRC_ROOT}/ballistica/game/account.h
+ ${BA_SRC_ROOT}/ballistica/game/client_controller_interface.h
+ ${BA_SRC_ROOT}/ballistica/game/connection/connection.cc
+ ${BA_SRC_ROOT}/ballistica/game/connection/connection.h
+ ${BA_SRC_ROOT}/ballistica/game/connection/connection_to_client.cc
+ ${BA_SRC_ROOT}/ballistica/game/connection/connection_to_client.h
+ ${BA_SRC_ROOT}/ballistica/game/connection/connection_to_client_udp.cc
+ ${BA_SRC_ROOT}/ballistica/game/connection/connection_to_client_udp.h
+ ${BA_SRC_ROOT}/ballistica/game/connection/connection_to_host.cc
+ ${BA_SRC_ROOT}/ballistica/game/connection/connection_to_host.h
+ ${BA_SRC_ROOT}/ballistica/game/connection/connection_to_host_udp.cc
+ ${BA_SRC_ROOT}/ballistica/game/connection/connection_to_host_udp.h
+ ${BA_SRC_ROOT}/ballistica/game/friend_score_set.h
+ ${BA_SRC_ROOT}/ballistica/game/game.cc
+ ${BA_SRC_ROOT}/ballistica/game/game.h
+ ${BA_SRC_ROOT}/ballistica/game/game_stream.cc
+ ${BA_SRC_ROOT}/ballistica/game/game_stream.h
+ ${BA_SRC_ROOT}/ballistica/game/host_activity.cc
+ ${BA_SRC_ROOT}/ballistica/game/host_activity.h
+ ${BA_SRC_ROOT}/ballistica/game/player.cc
+ ${BA_SRC_ROOT}/ballistica/game/player.h
+ ${BA_SRC_ROOT}/ballistica/game/player_spec.cc
+ ${BA_SRC_ROOT}/ballistica/game/player_spec.h
+ ${BA_SRC_ROOT}/ballistica/game/score_to_beat.h
+ ${BA_SRC_ROOT}/ballistica/game/session/client_session.cc
+ ${BA_SRC_ROOT}/ballistica/game/session/client_session.h
+ ${BA_SRC_ROOT}/ballistica/game/session/host_session.cc
+ ${BA_SRC_ROOT}/ballistica/game/session/host_session.h
+ ${BA_SRC_ROOT}/ballistica/game/session/net_client_session.cc
+ ${BA_SRC_ROOT}/ballistica/game/session/net_client_session.h
+ ${BA_SRC_ROOT}/ballistica/game/session/replay_client_session.cc
+ ${BA_SRC_ROOT}/ballistica/game/session/replay_client_session.h
+ ${BA_SRC_ROOT}/ballistica/game/session/session.cc
+ ${BA_SRC_ROOT}/ballistica/game/session/session.h
+ ${BA_SRC_ROOT}/ballistica/generic/base64.cc
+ ${BA_SRC_ROOT}/ballistica/generic/base64.h
+ ${BA_SRC_ROOT}/ballistica/generic/buffer.h
+ ${BA_SRC_ROOT}/ballistica/generic/huffman.cc
+ ${BA_SRC_ROOT}/ballistica/generic/huffman.h
+ ${BA_SRC_ROOT}/ballistica/generic/json.cc
+ ${BA_SRC_ROOT}/ballistica/generic/json.h
+ ${BA_SRC_ROOT}/ballistica/generic/lambda_runnable.h
+ ${BA_SRC_ROOT}/ballistica/generic/real_timer.h
+ ${BA_SRC_ROOT}/ballistica/generic/runnable.cc
+ ${BA_SRC_ROOT}/ballistica/generic/runnable.h
+ ${BA_SRC_ROOT}/ballistica/generic/timer.cc
+ ${BA_SRC_ROOT}/ballistica/generic/timer.h
+ ${BA_SRC_ROOT}/ballistica/generic/timer_list.cc
+ ${BA_SRC_ROOT}/ballistica/generic/timer_list.h
+ ${BA_SRC_ROOT}/ballistica/generic/utf8.cc
+ ${BA_SRC_ROOT}/ballistica/generic/utf8.h
+ ${BA_SRC_ROOT}/ballistica/generic/utils.cc
+ ${BA_SRC_ROOT}/ballistica/generic/utils.h
+ ${BA_SRC_ROOT}/ballistica/graphics/area_of_interest.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/area_of_interest.h
+ ${BA_SRC_ROOT}/ballistica/graphics/camera.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/camera.h
+ ${BA_SRC_ROOT}/ballistica/graphics/component/empty_component.h
+ ${BA_SRC_ROOT}/ballistica/graphics/component/object_component.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/component/object_component.h
+ ${BA_SRC_ROOT}/ballistica/graphics/component/post_process_component.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/component/post_process_component.h
+ ${BA_SRC_ROOT}/ballistica/graphics/component/render_component.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/component/render_component.h
+ ${BA_SRC_ROOT}/ballistica/graphics/component/shield_component.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/component/shield_component.h
+ ${BA_SRC_ROOT}/ballistica/graphics/component/simple_component.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/component/simple_component.h
+ ${BA_SRC_ROOT}/ballistica/graphics/component/smoke_component.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/component/smoke_component.h
+ ${BA_SRC_ROOT}/ballistica/graphics/component/special_component.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/component/special_component.h
+ ${BA_SRC_ROOT}/ballistica/graphics/component/sprite_component.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/component/sprite_component.h
+ ${BA_SRC_ROOT}/ballistica/graphics/frame_def.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/frame_def.h
+ ${BA_SRC_ROOT}/ballistica/graphics/framebuffer.h
+ ${BA_SRC_ROOT}/ballistica/graphics/gl/gl_sys.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/gl/gl_sys.h
+ ${BA_SRC_ROOT}/ballistica/graphics/gl/renderer_gl.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/gl/renderer_gl.h
+ ${BA_SRC_ROOT}/ballistica/graphics/graphics.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/graphics.h
+ ${BA_SRC_ROOT}/ballistica/graphics/graphics_server.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/graphics_server.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/image_mesh.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/image_mesh.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_buffer.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_buffer_base.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_buffer_vertex_simple_full.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_buffer_vertex_smoke_full.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_buffer_vertex_sprite.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_data.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_data.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_data_client_handle.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_data_client_handle.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_index_buffer_16.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_index_buffer_32.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_base.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_dual_texture_full.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_object_split.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_simple_full.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_simple_split.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_smoke_full.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_indexed_static_dynamic.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_non_indexed.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/mesh_renderer_data.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/sprite_mesh.h
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/text_mesh.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/mesh/text_mesh.h
+ ${BA_SRC_ROOT}/ballistica/graphics/net_graph.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/net_graph.h
+ ${BA_SRC_ROOT}/ballistica/graphics/render_command_buffer.h
+ ${BA_SRC_ROOT}/ballistica/graphics/render_pass.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/render_pass.h
+ ${BA_SRC_ROOT}/ballistica/graphics/render_target.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/render_target.h
+ ${BA_SRC_ROOT}/ballistica/graphics/renderer.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/renderer.h
+ ${BA_SRC_ROOT}/ballistica/graphics/text/font_page_map_data.h
+ ${BA_SRC_ROOT}/ballistica/graphics/text/text_graphics.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/text/text_graphics.h
+ ${BA_SRC_ROOT}/ballistica/graphics/text/text_group.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/text/text_group.h
+ ${BA_SRC_ROOT}/ballistica/graphics/text/text_packer.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/text/text_packer.h
+ ${BA_SRC_ROOT}/ballistica/graphics/texture/dds.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/texture/dds.h
+ ${BA_SRC_ROOT}/ballistica/graphics/texture/ktx.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/texture/ktx.h
+ ${BA_SRC_ROOT}/ballistica/graphics/texture/pvr.cc
+ ${BA_SRC_ROOT}/ballistica/graphics/texture/pvr.h
+ ${BA_SRC_ROOT}/ballistica/input/device/client_input_device.cc
+ ${BA_SRC_ROOT}/ballistica/input/device/client_input_device.h
+ ${BA_SRC_ROOT}/ballistica/input/device/input_device.cc
+ ${BA_SRC_ROOT}/ballistica/input/device/input_device.h
+ ${BA_SRC_ROOT}/ballistica/input/device/joystick.cc
+ ${BA_SRC_ROOT}/ballistica/input/device/joystick.h
+ ${BA_SRC_ROOT}/ballistica/input/device/keyboard_input.cc
+ ${BA_SRC_ROOT}/ballistica/input/device/keyboard_input.h
+ ${BA_SRC_ROOT}/ballistica/input/device/test_input.cc
+ ${BA_SRC_ROOT}/ballistica/input/device/test_input.h
+ ${BA_SRC_ROOT}/ballistica/input/device/touch_input.cc
+ ${BA_SRC_ROOT}/ballistica/input/device/touch_input.h
+ ${BA_SRC_ROOT}/ballistica/input/input.cc
+ ${BA_SRC_ROOT}/ballistica/input/input.h
+ ${BA_SRC_ROOT}/ballistica/input/remote_app.cc
+ ${BA_SRC_ROOT}/ballistica/input/remote_app.h
+ ${BA_SRC_ROOT}/ballistica/input/std_input_module.cc
+ ${BA_SRC_ROOT}/ballistica/input/std_input_module.h
+ ${BA_SRC_ROOT}/ballistica/math/matrix44f.cc
+ ${BA_SRC_ROOT}/ballistica/math/matrix44f.h
+ ${BA_SRC_ROOT}/ballistica/math/point2d.h
+ ${BA_SRC_ROOT}/ballistica/math/random.cc
+ ${BA_SRC_ROOT}/ballistica/math/random.h
+ ${BA_SRC_ROOT}/ballistica/math/rect.h
+ ${BA_SRC_ROOT}/ballistica/math/vector2f.h
+ ${BA_SRC_ROOT}/ballistica/math/vector3f.cc
+ ${BA_SRC_ROOT}/ballistica/math/vector3f.h
+ ${BA_SRC_ROOT}/ballistica/math/vector4f.h
+ ${BA_SRC_ROOT}/ballistica/media/component/collide_model.cc
+ ${BA_SRC_ROOT}/ballistica/media/component/collide_model.h
+ ${BA_SRC_ROOT}/ballistica/media/component/cube_map_texture.cc
+ ${BA_SRC_ROOT}/ballistica/media/component/cube_map_texture.h
+ ${BA_SRC_ROOT}/ballistica/media/component/data.cc
+ ${BA_SRC_ROOT}/ballistica/media/component/data.h
+ ${BA_SRC_ROOT}/ballistica/media/component/media_component.cc
+ ${BA_SRC_ROOT}/ballistica/media/component/media_component.h
+ ${BA_SRC_ROOT}/ballistica/media/component/model.cc
+ ${BA_SRC_ROOT}/ballistica/media/component/model.h
+ ${BA_SRC_ROOT}/ballistica/media/component/sound.cc
+ ${BA_SRC_ROOT}/ballistica/media/component/sound.h
+ ${BA_SRC_ROOT}/ballistica/media/component/texture.cc
+ ${BA_SRC_ROOT}/ballistica/media/component/texture.h
+ ${BA_SRC_ROOT}/ballistica/media/data/collide_model_data.cc
+ ${BA_SRC_ROOT}/ballistica/media/data/collide_model_data.h
+ ${BA_SRC_ROOT}/ballistica/media/data/data_data.cc
+ ${BA_SRC_ROOT}/ballistica/media/data/data_data.h
+ ${BA_SRC_ROOT}/ballistica/media/data/media_component_data.cc
+ ${BA_SRC_ROOT}/ballistica/media/data/media_component_data.h
+ ${BA_SRC_ROOT}/ballistica/media/data/model_data.cc
+ ${BA_SRC_ROOT}/ballistica/media/data/model_data.h
+ ${BA_SRC_ROOT}/ballistica/media/data/model_renderer_data.h
+ ${BA_SRC_ROOT}/ballistica/media/data/sound_data.cc
+ ${BA_SRC_ROOT}/ballistica/media/data/sound_data.h
+ ${BA_SRC_ROOT}/ballistica/media/data/texture_data.cc
+ ${BA_SRC_ROOT}/ballistica/media/data/texture_data.h
+ ${BA_SRC_ROOT}/ballistica/media/data/texture_preload_data.cc
+ ${BA_SRC_ROOT}/ballistica/media/data/texture_preload_data.h
+ ${BA_SRC_ROOT}/ballistica/media/data/texture_renderer_data.h
+ ${BA_SRC_ROOT}/ballistica/media/media.cc
+ ${BA_SRC_ROOT}/ballistica/media/media.h
+ ${BA_SRC_ROOT}/ballistica/media/media_server.cc
+ ${BA_SRC_ROOT}/ballistica/media/media_server.h
+ ${BA_SRC_ROOT}/ballistica/networking/lag_sim.cc
+ ${BA_SRC_ROOT}/ballistica/networking/lag_sim.h
+ ${BA_SRC_ROOT}/ballistica/networking/master_server_config.h
+ ${BA_SRC_ROOT}/ballistica/networking/network_reader.cc
+ ${BA_SRC_ROOT}/ballistica/networking/network_reader.h
+ ${BA_SRC_ROOT}/ballistica/networking/network_write_module.cc
+ ${BA_SRC_ROOT}/ballistica/networking/network_write_module.h
+ ${BA_SRC_ROOT}/ballistica/networking/networking.cc
+ ${BA_SRC_ROOT}/ballistica/networking/networking.h
+ ${BA_SRC_ROOT}/ballistica/networking/networking_sys.h
+ ${BA_SRC_ROOT}/ballistica/networking/sockaddr.cc
+ ${BA_SRC_ROOT}/ballistica/networking/sockaddr.h
+ ${BA_SRC_ROOT}/ballistica/networking/telnet_server.cc
+ ${BA_SRC_ROOT}/ballistica/networking/telnet_server.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/amazon/platform_android_amazon.cc
+ ${BA_SRC_ROOT}/ballistica/platform/android/amazon/platform_android_amazon.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/android_context.cc
+ ${BA_SRC_ROOT}/ballistica/platform/android/android_context.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/android_gl3.c
+ ${BA_SRC_ROOT}/ballistica/platform/android/android_gl3.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/cardboard/platform_android_cardboard.cc
+ ${BA_SRC_ROOT}/ballistica/platform/android/cardboard/platform_android_cardboard.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/google/connection_to_client_google_play.cc
+ ${BA_SRC_ROOT}/ballistica/platform/android/google/connection_to_client_google_play.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/google/connection_to_host_google_play.cc
+ ${BA_SRC_ROOT}/ballistica/platform/android/google/connection_to_host_google_play.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/google/platform_android_google.cc
+ ${BA_SRC_ROOT}/ballistica/platform/android/google/platform_android_google.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/ifaddrs_android_ext.cc
+ ${BA_SRC_ROOT}/ballistica/platform/android/ifaddrs_android_ext.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/platform_android.cc
+ ${BA_SRC_ROOT}/ballistica/platform/android/platform_android.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/utf8/checked.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/utf8/core.h
+ ${BA_SRC_ROOT}/ballistica/platform/android/utf8/unchecked.h
+ ${BA_SRC_ROOT}/ballistica/platform/apple/app_delegate.h
+ ${BA_SRC_ROOT}/ballistica/platform/apple/apple_utils.h
+ ${BA_SRC_ROOT}/ballistica/platform/apple/platform_apple.cc
+ ${BA_SRC_ROOT}/ballistica/platform/apple/platform_apple.h
+ ${BA_SRC_ROOT}/ballistica/platform/apple/scripting_bridge_itunes.h
+ ${BA_SRC_ROOT}/ballistica/platform/apple/sdl_main_mac.h
+ ${BA_SRC_ROOT}/ballistica/platform/linux/platform_linux.cc
+ ${BA_SRC_ROOT}/ballistica/platform/linux/platform_linux.h
+ ${BA_SRC_ROOT}/ballistica/platform/min_sdl.h
+ ${BA_SRC_ROOT}/ballistica/platform/oculus/main_rift.cc
+ ${BA_SRC_ROOT}/ballistica/platform/oculus/oculus_utils.cc
+ ${BA_SRC_ROOT}/ballistica/platform/oculus/oculus_utils.h
+ ${BA_SRC_ROOT}/ballistica/platform/platform.cc
+ ${BA_SRC_ROOT}/ballistica/platform/platform.h
+ ${BA_SRC_ROOT}/ballistica/platform/sdl/sdl_app.cc
+ ${BA_SRC_ROOT}/ballistica/platform/sdl/sdl_app.h
+ ${BA_SRC_ROOT}/ballistica/platform/sdl/sdl_sys.cc
+ ${BA_SRC_ROOT}/ballistica/platform/sdl/sdl_sys.h
+ ${BA_SRC_ROOT}/ballistica/platform/windows/platform_windows.cc
+ ${BA_SRC_ROOT}/ballistica/platform/windows/platform_windows.h
+ ${BA_SRC_ROOT}/ballistica/platform/windows/platform_windows_oculus.cc
+ ${BA_SRC_ROOT}/ballistica/platform/windows/platform_windows_oculus.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_activity_data.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_activity_data.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_collide_model.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_collide_model.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_context.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_context.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_context_call.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_context_call.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_data.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_data.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_input_device.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_input_device.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_material.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_material.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_model.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_model.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_node.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_node.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_player.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_player.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_session_data.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_session_data.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_sound.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_sound.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_texture.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_texture.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_timer.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_timer.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_vec3.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_vec3.h
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_widget.cc
+ ${BA_SRC_ROOT}/ballistica/python/class/python_class_widget.h
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_account.cc
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_account.h
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_app.cc
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_app.h
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_gameplay.cc
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_gameplay.h
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_graphics.cc
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_graphics.h
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_input.cc
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_input.h
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_media.cc
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_media.h
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_networking.cc
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_networking.h
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_system.cc
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_system.h
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_ui.cc
+ ${BA_SRC_ROOT}/ballistica/python/methods/python_methods_ui.h
+ ${BA_SRC_ROOT}/ballistica/python/python.cc
+ ${BA_SRC_ROOT}/ballistica/python/python.h
+ ${BA_SRC_ROOT}/ballistica/python/python_command.cc
+ ${BA_SRC_ROOT}/ballistica/python/python_command.h
+ ${BA_SRC_ROOT}/ballistica/python/python_context_call.cc
+ ${BA_SRC_ROOT}/ballistica/python/python_context_call.h
+ ${BA_SRC_ROOT}/ballistica/python/python_context_call_runnable.h
+ ${BA_SRC_ROOT}/ballistica/python/python_ref.cc
+ ${BA_SRC_ROOT}/ballistica/python/python_ref.h
+ ${BA_SRC_ROOT}/ballistica/python/python_sys.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/anim_curve_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/anim_curve_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/bomb_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/bomb_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/combine_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/combine_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/explosion_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/explosion_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/flag_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/flag_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/flash_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/flash_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/globals_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/globals_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/image_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/image_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/light_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/light_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/locator_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/locator_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/math_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/math_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/node_attribute.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/node_attribute.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/node_attribute_connection.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/node_attribute_connection.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/node_type.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/null_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/null_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/player_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/player_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/prop_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/prop_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/region_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/region_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/scorch_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/scorch_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/session_globals_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/session_globals_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/shield_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/shield_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/sound_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/sound_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/spaz_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/spaz_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/terrain_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/terrain_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/text_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/text_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/texture_sequence_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/texture_sequence_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/node/time_display_node.cc
+ ${BA_SRC_ROOT}/ballistica/scene/node/time_display_node.h
+ ${BA_SRC_ROOT}/ballistica/scene/scene.cc
+ ${BA_SRC_ROOT}/ballistica/scene/scene.h
+ ${BA_SRC_ROOT}/ballistica/ui/console.cc
+ ${BA_SRC_ROOT}/ballistica/ui/console.h
+ ${BA_SRC_ROOT}/ballistica/ui/ui.cc
+ ${BA_SRC_ROOT}/ballistica/ui/ui.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/button_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/button_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/check_box_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/check_box_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/column_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/column_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/container_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/container_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/h_scroll_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/h_scroll_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/image_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/image_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/root_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/root_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/row_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/row_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/scroll_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/scroll_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/stack_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/stack_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/text_widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/text_widget.h
+ ${BA_SRC_ROOT}/ballistica/ui/widget/widget.cc
+ ${BA_SRC_ROOT}/ballistica/ui/widget/widget.h
+ #AUTOGENERATED_END
+ )
+
+target_include_directories(ballisticacore PRIVATE
+ ${PYTHON_INCLUDE_DIRS}
+ ${BA_SRC_ROOT}/external/open_dynamics_engine-ef
+ ${BA_SRC_ROOT}/external/qrencode-3.4.4
+ ${EXTRA_INCLUDE_DIRS}
+ )
+
+target_link_libraries(ballisticacore PRIVATE
+ ode pthread ${PYTHON_LIBRARIES}
+ ${SDL2_LIBRARIES} ${EXTRA_LIBRARIES})