rdkit / conda-rdkit

Conda build recipe for the rdkit
50 stars 30 forks source link

2016.09.2 rdkit build error on fedora 25 #37

Open rvianello opened 7 years ago

rvianello commented 7 years ago

On fedora 25, with gcc 6.2.1, the rdkit conda recipe fails with the following error

In file included from /home/ric/miniconda3/conda-bld/rdkit_1480453840975/_b_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/config.hpp:61:0, from /home/ric/miniconda3/conda-bld/rdkit_1480453840975/_b_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/cstdint.hpp:36, from /home/ric/miniconda3/conda-bld/rdkit_1480453840975/_b_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/multiprecision/cpp_int.hpp:11, from /home/ric/miniconda3/conda-bld/rdkit_1480453840975/work/Code/GraphMol/ChemReactions/Enumerate/Enumerate.cpp:36: /home/ric/miniconda3/conda-bld/rdkit_1480453840975/_b_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/multiprecision/cpp_int.hpp:181:4: error: right operand of shift expression ‘(1u << 63u)’ is >= than the precision of the left operand [-fpermissive] BOOST_STATIC_CONSTANT(limb_type, sign_bit_mask = 1u << (limb_bits - 1)); ^ /home/ric/miniconda3/conda-bld/rdkit_1480453840975/_b_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/multiprecision/cpp_int.hpp:401:4: error: right operand of shift expression ‘(1u << 63u)’ is >= than the precision of the left operand [-fpermissive] BOOST_STATIC_CONSTANT(limb_type, sign_bit_mask = 1u << (limb_bits - 1)); ^ /home/ric/miniconda3/conda-bld/rdkit_1480453840975/_b_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/multiprecision/cpp_int.hpp:548:4: error: right operand of shift expression ‘(1u << 63u)’ is >= than the precision of the left operand [-fpermissive] BOOST_STATIC_CONSTANT(limb_type, sign_bit_mask = 1u << (limb_bits - 1)); ^ Code/GraphMol/ChemReactions/CMakeFiles/ChemReactions.dir/build.make:350: recipe for target 'Code/GraphMol/ChemReactions/CMakeFiles/ChemReactions.dir/Enumerate/Enumerate.cpp.o' failed

the version of boost required by the rdkit recipe on unix is boost 1.56.0

rvianello commented 7 years ago

I tested the build with every other boost release starting from boost 1.56.0 and it only succeeded with boost 1.62.

Similar errors have been reported to occur on Kubuntu 16.10 (#39) where building with boost 1.57 and 1.61 was also verified to fail.

rvianello commented 7 years ago

@bp-kelley @greglandrum the current rdkit release appears to be problematic to build on some recent linux distributions. Do you have any idea if it may be possible to work around the above errors without upgrading to the latest boost?

greglandrum commented 7 years ago

@rvianello Sorry, I missed this when it first came through. Can you try adding -fpermissive to the CXXFLAGS and see if that helps?

rvianello commented 7 years ago

@greglandrum yes, thanks for the suggestion, I will try that and then post an update.

greglandrum commented 7 years ago

Another possibility may be to add USE_BOOST_MULTIPRECISION_DEFAULT=0 to the environment before building. (I'm just googling around; I can't actually test this at the moment)

apahl commented 7 years ago

I can report that using USE_BOOST_MULTIPRECISION_DEFAULT=0does not lead to a successful build.

apahl commented 7 years ago

Where would I add -fpermissive to the CXXFLAGS in the conda build workflow?

greglandrum commented 7 years ago

Maybe you may need to add the USE_BOOST_MULTIPRECISION_DEFAULT=0 argument as a flag when you invoke CMAKE? The easiest way to quickly test adding -fpermissive is to edit the current build settings by running ccmake . in your build directory, hitting t to toggle into advance mode, adding -fpermissive to the end of CMAKE_CXX_FLAGS_RELEASE, and then typing c followed by g.

apahl commented 7 years ago

I used USE_BOOST_MULTIPRECISION_DEFAULT=0 conda build rdkit.

bp-kelley commented 7 years ago

Here is the boost ticket: https://svn.boost.org/trac/boost/ticket/12181

sigh. those kind of look like real errors too.

On Mon, Dec 19, 2016 at 8:14 AM, Axel Pahl notifications@github.com wrote:

I used USE_BOOST_MULTIPRECISION_DEFAULT=0 conda build rdkit.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/rdkit/conda-rdkit/issues/37#issuecomment-267961129, or mute the thread https://github.com/notifications/unsubscribe-auth/AJbioC4VgpqXyFJKD_0S6jvFHkWyDW29ks5rJoMYgaJpZM4K_haY .

rvianello commented 7 years ago

-DCMAKE_CXX_FLAGS_RELEASE=-fpermissive does indeed seem to be sufficient to work around the problem, I'm checking if this is the proper way to pass an additional flag on the cmake command line, without overwriting the default ones.

apahl commented 7 years ago

With -DCMAKE_CXX_FLAGS_RELEASE=-fpermissive put in the cmdline of cmake in build.sh, the build also runs successfully for me.
But, I get serious performance issues with the new version (and I don't know if this is related to the added parameter). When I perform a substructure search for the same structure in the same data set of ~190k compounds, the search takes 36 sec with RDKit 2016_03_2 and 130(!) sec with the current RDKit_2016_09_2.

greglandrum commented 7 years ago

I believe that's because this formulation overwrites CXX_FLAGS_RELEASE instead of supplementing them, so you aren't compiling with full optimization. Please try: -DCMAKE_CXX_FLAGS_RELEASE="-fpermissive -O3" (I think that syntax is right)

apahl commented 7 years ago

Unfortunately, with that change (-DCMAKE_CXX_FLAGS_RELEASE="-fpermissive -O3"), the build fails again, but now at a later point and with a boost / regex related error:

[ 90%] Linking CXX executable testSLNParse
../../../lib/libSLNParse.so.1.2016.09.2: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary[abi:cxx11](char const*, char const*) const'
../../../lib/libSLNParse.so.1.2016.09.2: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform[abi:cxx11](char const*, char const*) const'
collect2: error: ld returned 1 exit status
Code/GraphMol/SLNParse/CMakeFiles/testSLNParse.dir/build.make:104: recipe for target 'Code/GraphMol/SLNParse/testSLNParse' failed
make[2]: *** [Code/GraphMol/SLNParse/testSLNParse] Error 1
CMakeFiles/Makefile2:7758: recipe for target 'Code/GraphMol/SLNParse/CMakeFiles/testSLNParse.dir/all' failed
make[1]: *** [Code/GraphMol/SLNParse/CMakeFiles/testSLNParse.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

But, boost and boost regex are available and found:

-- Found Threads: TRUE  
-- Boost version: 1.56.0
-- Found the following Boost libraries:
--   thread
--   system
-- Boost version: 1.56.0
-- Found the following Boost libraries:
--   serialization
[...]
-- Boost version: 1.56.0
-- Found the following Boost libraries:
--   regex
-- Configuring done

and the error did not occur when I used just -fpermissive. I have also edited build.sh to run make without the -joption.

rvianello commented 7 years ago

with -D CMAKE_CXX_FLAGS="-fpermissive" a different layer of command line flags is set, that I think allows prepending this flag without altering the optimization flags (in my environment -O3 -DNDEBUG) that are appended when building in release mode (checked with make VERBOSE=1).

this was sufficient to me to complete the build and I didn't experience any issues related to the SLN parser. @apahl maybe you could try both passing -fpermissive and disabling the SLN support as discussed in #39 and see if the build at least proceeds to completion?

greglandrum commented 7 years ago

As an FYI to be sure that something catastrophic hadn't happened with the release: The 2016_09_2 version of the RDKit does seem to be a bit slower than the 2016_03_4 release (at least using the conda builds on my Mac), but it's not a dramatic difference. Still something for me to investigate.

apahl commented 7 years ago

@rvianello: If I just pass -DCMAKE_CXX_FLAGS_RELEASE=-fpermissive. the build is successful without disabling SLN support, as mentioned above (https://github.com/rdkit/conda-rdkit/issues/37#issuecomment-268234408). The problem is, that I get really slow performance, apparently resulting from a build in debug mode.

rvianello commented 7 years ago

@apahl yes, that's why I suggested using CMAKE_CXX_FLAGS instead of CMAKE_CXX_FLAGS_RELEASE. This way the optimization flags should be preserved. On the other hand, your problem with SLN looks likely to be related to the optimization level, so you will probably need to disable it.

bp-kelley commented 7 years ago

Axel, could you try this PR?

https://github.com/rdkit/rdkit/pull/1225

Specifically it adds the following to Code/GraphMol/ChemReactions/CMakeList.txt

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5) if(Boost_VERSION LESS 106200) set_property(SOURCE Enumerate/Enumerate.cpp APPEND_STRING PROPERTY COMPILE_FLAGS " -fpermissive ") endif() endif()

rdkit_library(ChemReactions

On Wed, Dec 21, 2016 at 10:16 AM, Riccardo Vianello < notifications@github.com> wrote:

@apahl https://github.com/apahl yes, that's why I suggested using CMAKE_CXX_FLAGS instead of CMAKE_CXX_FLAGS_RELEASE. This way the optimization flags should be preserved. On the other hand, your problem with SLN looks likely to be related to the optimization level, so you will probably need to disable it.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/rdkit/conda-rdkit/issues/37#issuecomment-268547429, or mute the thread https://github.com/notifications/unsubscribe-auth/AJbioJ8_OjK6ZLE-zoLXPzg50PmbwGNcks5rKUK-gaJpZM4K_haY .

apahl commented 7 years ago

@rvianello: My apologies, I did not notice that you mentioned a different flag.
Yes, with -D CMAKE_CXX_FLAGS="-fpermissive" and disabling SLN support as you describe, the build runs through and all tests are passed. Benchmark will happen tomorrow. @bp-kelley: Sorry, I am not quite sure how I can build a specific PR with conda build rdkit. I have not installed an RDKit build chain outside Anaconda anymore and my Kubuntu would then install yet another boost version than the one from the conda-rdkit.

apahl commented 7 years ago

I have just done the benchmark with the latest successful build using the flags mentioned by @rvianello (-D CMAKE_CXX_FLAGS="-fpermissive" and -D RDK_BUILD_SLN_SUPPORT=OFF in the cmake cmdline of build.sh) and the performance is just the same as with the old release.
Since I do not need SLN support, I am good to go and will close https://github.com/rdkit/conda-rdkit/issues/39. Looking forward to use 2016.09.2, many thanks for all your help.

Have a happy and relaxing holiday!

Kind regards,
Axel