kingsfordgroup / sailfish

Rapid Mapping-based Isoform Quantification from RNA-Seq Reads
http://www.cs.cmu.edu/~ckingsf/software/sailfish
GNU General Public License v3.0
124 stars 45 forks source link

build fail @step 'libtbb' #102

Open subwaystation opened 7 years ago

subwaystation commented 7 years ago

Hi@all, I tried to build sailfish on ArchLinux, but I get stuck here:

[ 40%] Performing build step for 'libtbb' cd /home/heumos/git/sailfish/external/tbb43_20140724oss && make "CXXFLAGS= -UDO_ITT_NOTIFY" lambdas=1 compiler=gcc cfg=release tbb_build_prefix=LIBS make[3]: Entering directory '/home/heumos/git/sailfish/external/tbb43_20140724oss' Created ./build/LIBS_release and ..._debug directories make -C "./build/LIBS_debug" -r -f ../../build/Makefile.tbb cfg=debug make[4]: Entering directory '/home/heumos/git/sailfish/external/tbb43_20140724oss/build/LIBS_debug' ../../build/Makefile.tbb:31: CONFIG: cfg=debug arch=intel64 compiler=gcc target=linux runtime=cc7.1.1_libc2.25_kernel4.12.3 g++ -o pipeline.o -c -MMD -DTBB_USE_DEBUG -DDO_ITT_NOTIFY -g -O0 -DUSE_PTHREAD -m64 -fPIC -D__TBB_BUILD=1 -Wall -Wno-parentheses -Wno-non-virtual-dtor -UDO_ITT_NOTIFY -std=c++0x -D_TBB_CPP0X -I../../src -I../../src/rml/include -I../../include ../../src/tbb/pipeline.cpp In file included from ../../src/tbb/pipeline.cpp:21:0: ../../include/tbb/pipeline.h:328:74: error: ‘has_trivial_copy_constructor’ is not a member of ‘std’ template<typename T> struct tbb_trivially_copyable { enum { value = std::has_trivial_copy_constructor<T>::value }; }; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../include/tbb/pipeline.h:328:74: note: suggested alternative: ‘is_trivially_copy_constructible’ template<typename T> struct tbb_trivially_copyable { enum { value = std::has_trivial_copy_constructor<T>::value }; }; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ is_trivially_copy_constructible ../../include/tbb/pipeline.h:328:104: error: expected primary-expression before ‘>’ token template<typename T> struct tbb_trivially_copyable { enum { value = std::has_trivial_copy_constructor<T>::value }; }; ^ ../../include/tbb/pipeline.h:328:107: error: ‘::value’ has not been declared template<typename T> struct tbb_trivially_copyable { enum { value = std::has_trivial_copy_constructor<T>::value }; }; ^~~~~ make[4]: *** [../../build/common_rules.inc:77: pipeline.o] Error 1 make[4]: Leaving directory '/home/heumos/git/sailfish/external/tbb43_20140724oss/build/LIBS_debug' make[3]: *** [Makefile:32: tbb] Error 2 make[3]: Leaving directory '/home/heumos/git/sailfish/external/tbb43_20140724oss' make[2]: *** [CMakeFiles/libtbb.dir/build.make:115: libtbb-prefix/src/libtbb-stamp/libtbb-build] Error 2 make[2]: Leaving directory '/home/heumos/git/sailfish/build' make[1]: *** [CMakeFiles/Makefile2:219: CMakeFiles/libtbb.dir/all] Error 2 make[1]: Leaving directory '/home/heumos/git/sailfish/build' make: *** [Makefile:166: all] Error 2 I used the following building commands to build sailfish: cmake -DFETCH_BOOST=TRUE ../ make

Any help would be appreciated! All the best, Simon

studident commented 6 years ago

Is there a solution to this problem yet?

I ran in to the same errors and couldn't find a way to resolve them...

gmarcais commented 6 years ago

I built sailfish on Arch by using the tbb library distributed with the system. Install the intel-tbb package with pacman, reconfigure and you should be good to go.

Well, almost good, I had to apply the following patch to compile properly, to fix a totally different error (a conflict with the macro CHAR_WIDTH):

diff --git a/include/spdlog/details/format.cc b/include/spdlog/details/format.cc
index dde4aa5..ca1c921 100644
--- a/include/spdlog/details/format.cc
+++ b/include/spdlog/details/format.cc
@@ -480,23 +480,23 @@ public:
         typedef typename BasicWriter<Char>::CharPtr CharPtr;
         Char fill = internal::CharTraits<Char>::cast(spec_.fill());
         CharPtr out = CharPtr();
-        const unsigned CHAR_WIDTH = 1;
-        if (spec_.width_ > CHAR_WIDTH) {
+        const unsigned _CHAR_WIDTH = 1;
+        if (spec_.width_ > _CHAR_WIDTH) {
             out = writer_.grow_buffer(spec_.width_);
             if (spec_.align_ == ALIGN_RIGHT) {
-                std::fill_n(out, spec_.width_ - CHAR_WIDTH, fill);
-                out += spec_.width_ - CHAR_WIDTH;
+                std::fill_n(out, spec_.width_ - _CHAR_WIDTH, fill);
+                out += spec_.width_ - _CHAR_WIDTH;
             }
             else if (spec_.align_ == ALIGN_CENTER) {
                 out = writer_.fill_padding(out, spec_.width_,
-                                           internal::check(CHAR_WIDTH), fill);
+                                           internal::check(_CHAR_WIDTH), fill);
             }
             else {
-                std::fill_n(out + CHAR_WIDTH, spec_.width_ - CHAR_WIDTH, fill);
+                std::fill_n(out + _CHAR_WIDTH, spec_.width_ - _CHAR_WIDTH, fill);
             }
         }
         else {
-            out = writer_.grow_buffer(CHAR_WIDTH);
+            out = writer_.grow_buffer(_CHAR_WIDTH);
         }
         *out = internal::CharTraits<Char>::cast(value);
     }

Hope this helps.