How do I setup the TBB dependency?


#1

It appears that approximately a month ago, HighFidelity introduced a new dependency called Thread Building Blocks. I was rather surprised, since I don’t often see a project adding or removing external dependencies at this late stage. In either case, I am unable to compile HIFI any longer since then. I kind of ragequit when I noticed this, but now I’d like to get HIFI to work again.

I run openSUSE 13.2 x64, and TBB is not offered in the official repositories of this distribution. I don’t see a branch on Highfidelity Github either, like there’s one for Gverb. I instead managed to grab the source code from other websites, but didn’t succeed in doing anything useful with it. Can someone explain where to download TBB from and where to put it in please, then where to point each related Cmake path?


#2

It comes from intel:

https://www.threadingbuildingblocks.org/download#stable-releases

I unpacked the tbb43 tgz into a folder in my /usr/src/ and ran:

export TBB_ROOT_DIR=’/usr/src/tbb43_20141204oss’

(use the tbb43…whatever… that matches your download, of course)

Also added the above line to the bottom of my ~/.profile so the setting would be there after reboots.


#3

I wrote a document for compiling for OpenSuSE a while back but never published it. I will look for it and edit this post when I find it but we can find a way to get you back running!

Edit:

Found instructions via: http://software.opensuse.org/download.html?project=devel%3Alibraries%3Ac_c%2B%2B&package=tbb

zypper addrepo http://download.opensuse.org/repositories/devel:libraries:c_c++/openSUSE_13.2/devel:libraries:c_c++.repo
zypper refresh
zypper install tbb

Also if you need any other compile help, feel free to hit me up via private message here or gitter: https://gitter.im/highfidelity/hifi - my name there is “nbq”


#4

@glenalec I would prefer avoiding that method, as I’m only okay with installing software packages on the root partition. Unpacking files in the system folders make updating harder, as well as junk which is hard to clean building up on the partition. Usually, when I can’t find a software package, I unpack the include / source / library folders somewhere in my home directory and manually point cmake to them.

@Coal I tried your suggestion, but it didn’t work. Doing the above installed the package libtbb2, which only seems to contain the file /usr/lib64/libtbb.so.2. Cmake instead seems to have several TBB related fields, and seeks both an include folder as well as a library. I looked at a few packages already, and it appears there’s no simple solution.


#5

In all truth @MirceaKitsune, his method is more correct because it needs that source and the folder sits dormant until referenced.

The best way to handle it in your case would be put it in your source directory with the gverb and hifi sources and then reference it during cmake with:

cmake -DTBB_ROOT_DIR=/path/to/tbb43_20141204oss …

This way you are telling the hifi cmake where it is located.

I was just tired and really forgot the proper method at that moment since my tutorial for HiFi Compile for OpenSuSE 13.2, so I will update it and get it up for docs when I actually get done with some of the other projects first.

Hope that helps!


#6

@Coal That sounds like the good way to me as well. I already do this with gverb and it works very well.

Only problem is where to get that tbb43_20141204oss package. One which contains both the source and libraries which HIFI wants. The TBB packages I found so far only seem to contain one or the other or neither (just the documentation), something has always been missing with the ones I tried out.


#7

@MirceaKitsune You can download it right here https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20141204oss_src.tgz


#8

@Coal Thanks. Still wouldn’t work however:

mircea@linux-qz0r:~/Games/SecondLife/HighFidelity_GIT> cmake -DTBB_ROOT_DIR=/home/mircea/Games/SecondLife/HighFidelity_GIT/libraries/tbb43/
– The C compiler identification is GNU 4.8.3
– The CXX compiler identification is GNU 4.8.3
– Check for working C compiler: /usr/bin/cc
– Check for working C compiler: /usr/bin/cc – works
– Detecting C compiler ABI info
– Detecting C compiler ABI info - done
– Check for working CXX compiler: /usr/bin/c++
– Check for working CXX compiler: /usr/bin/c++ – works
– Detecting CXX compiler ABI info
– Detecting CXX compiler ABI info - done
– Performing Test COMPILER_SUPPORTS_CXX11
– Performing Test COMPILER_SUPPORTS_CXX11 - Success
– Performing Test COMPILER_SUPPORTS_CXX0X
– Performing Test COMPILER_SUPPORTS_CXX0X - Success
– Found GLM: /usr/include  
– Found OpenSSL: /usr/lib64/libssl.so;/usr/lib64/libcrypto.so (found version “1.0.1k”)
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:136 (message):
  Could NOT find TBB (missing: TBB_LIBRARY TBB_MALLOC_LIBRARY)
Call Stack (most recent call first):
  /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:343 (_FPHSA_FAILURE_MESSAGE)
  cmake/modules/FindTBB.cmake:73 (find_package_handle_standard_args)
  libraries/networking/CMakeLists.txt:15 (find_package)

– Configuring incomplete, errors occurred!
See also “/home/mircea/Games/SecondLife/HighFidelity_GIT/CMakeFiles/CMakeOutput.log”.
mircea@linux-qz0r:~/Games/SecondLife/HighFidelity_GIT>


#9

I will be home soon and test out a build on an OpenSuSE vps so then I can better narrow it down for you with hands on knowledge.

Either way we will get you all set up :wink:


#10

Are you setting environment variable for TBB?

export TBB_ROOT_DIR=’/opt/tbb43_20141204oss’

Obviously, replacing path with correct for your system.


#11

Doing a -DTBB_ROOT_DIR=/opt/tbb43_20141204oss is the exact same thing as it tells cmake the same info as an exported variable that just sits in memory.

Though I am not saying “don’t try it.”

(edited to remove the space between -D and TBB since I was on phone)


#12

Either way :wink: It’s not finding TBB so whatever makes it find it will likely help. I prefer setting it as an env var in my .profile so I don’t have to think about it.


#13

I just brought up my original OpenSuSE VM I used for my writeup, so I will test it with TBB right now.

I love Proxmox because I can store a kvm container of about any OS and power it up when necessary to test.

Edited to add:

@MirceaKitsune I got it to recognize TBB just fine, will post that in a second, going ahead with BulletSim compile and install so you have all you need to get it up and running again. Will update with full instructions in a moment.

Second Edit - Just making new post since it has pertinent information


#14

Here are the EXTRA instructions for compiling this under OpenSuSE 13.2

  • We assume you are running as non root user and doing this from the ~/git directory (example only)
  • We assume that gverb is under ~/git/gverb
  • We assume that HiFi is under ~/git/hifi

Code:

TBB - reference in cmake needed

wget https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb43_20141204oss_lin.tgz
tar zxvf tbb43_20141204oss_lin.tgz
rm -rf tbb43_20141204oss_lin.tgz

BulletSim - no cmake reference needed

wget https://bullet.googlecode.com/files/bullet-2.82-r2704.zip
unzip bullet-2.82-r2704.zip
rm -rf bullet-2.82-r2704.zip
cd bullet-2.82-r2704
cmake -G "Unix Makefiles"
make
sudo make install

Next Step - CMake and beyond!

  • Make a directory somewhere as your build directory, cd (change directory to it)
  • CMake command used in example: cmake -DGVERB_SRC_DIRS=~/git/gverb/src -DGVERB_INCLUDE_DIRS=~/git/gverb/include -DTBB_ROOT_DIR=~/git/tbb43_20141204oss ~/git/hifi

Hope that helps clear some stuff up for you!


#15

Thank you @Coal! I will try this soon and mention how it works out.


#16

Don’t give up! I managed to get a Debian build chain going from Ubuntu instructions (the two are just different enough to make things tedious). It took a lot of trial-error-and-google and help from this forum, but I am now compiling happily! :smiley:


#17

Thank you, Highfidelity compiles once again! I created a shell script with the cmake command, so next time I need to run cmake these issues should take care of themselves. Note that for Bullet I didn’t need to do anything since openSUSE offers it… wish it did the same with TBB, which I assume is a more obscure project given that openSUSE typically includes everything you need.

Speaking of which, I didn’t know that Hifi added a physics engine already! I was hoping it would choose Bullet, and apparently it has :smile:


#18

Welcome, its what I do!

Yep, I knew you would hit it, so I went ahead and included that in the information for you. BulletSim is a great choice by Andrew.

As time goes on, I will be updating the docs to get everything pretty straight forward for about every distro there is for those who want to get it running.

I am doing each one with pics and easy walk throughs to everyone can compile their own viewers etc.


#19

In my case, while Debian does have TBB, it is a version behind what is required, hence my own need to manually install it.

I imagine once the Jessie freeze is over a lot of stuff that is holding back will flood in with upgrades for us Debian users again.


#20

Ok… don’t take me the wrong way please, but really? I just did another GIT pull, and two new dependencies are now required, which again my distribution does not offer anywhere! Apparently they’re called RSSDK and SOXR. Any idea how how to fix these as well please?

I’m again confused as to why a project in such a late stage keeps adding new library dependencies all the time. Especially ones which are barely heard of, and difficult to find and set up. I would be appreciated if the developers could think of a way to handle this better (like it’s done with gverb), else I’ll have to consider no longer using HIFI until Linux builds can be published. I know there’s a reason for the extra packages and I’m not trying to judge, but it’s frustrating to setup new software packages or pieces of code every few days like this.