symengine / symengine

SymEngine is a fast symbolic manipulation library, written in C++
https://symengine.org
Other
1.14k stars 277 forks source link

Compiling with clang-6/llvm-6 and flint fails #1438

Open bjodah opened 6 years ago

bjodah commented 6 years ago

flint seem to be defining a macro "WORD_MAX" which causes problems when LLVM headers are included:

/conda-bld/symengine_1524531910238/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include/llvm/ADT/APInt.h:81:25: error: expected member name or ';' after declaration specifiers
  static const WordType WORD_MAX = ~WordType(0);
  ~~~~~~~~~~~~~~~~~~~~~ ^
/conda-bld/symengine_1524531910238/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include/flint/flint.h:122:18: note: expanded from macro 'WORD_MAX'
#define WORD_MAX LONG_MAX
                 ^
/conda-bld/symengine_1524531910238/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/lib/clang/6.0.0/include/limits.h:63:19: note: expanded from macro 'LONG_MAX'
#define LONG_MAX  __LONG_MAX__
                  ^
<built-in>:68:22: note: expanded from here
#define __LONG_MAX__ 9223372036854775807L
                     ^
1 error generated.

Don't know what the best way is to deal with this, maybe:

For now I'll just build without flint.

isuruf commented 6 years ago

Is this in llvm_double.cpp?

bjodah commented 6 years ago

It occurs when WITH_LLVM=ON, but before compilation of that source file (look like during precompilation of the header file):

source tree in: /conda-bld/symengine_1525163530667/work
-- The C compiler identification is Clang 6.0.0
-- The CXX compiler identification is Clang 6.0.0
-- Check for working C compiler: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/bin/clang-6.0
-- Check for working C compiler: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/bin/clang-6.0 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/bin/clang++
-- Check for working CXX compiler: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/bin/clang++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found GMP: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/lib/libgmp.so  
-- Found FLINT: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/lib/libflint.so  
-- Found MPC: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/lib/libmpc.so  
-- Found MPFR: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/lib/libmpfr.so  
-- cotire 1.7.8 loaded.
-- CXX target symengine cotired.
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
--------------------------------------------------------------------------------

+-------------------------------+
| Configuration results SUMMARY |
+-------------------------------+

CMAKE_C_COMPILER:   /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/bin/clang-6.0
CMAKE_CXX_COMPILER: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/bin/clang++
CMAKE_BUILD_TYPE: Release
CMAKE_CONFIGURATION_TYPES: 
CMAKE_CXX_FLAGS_DEBUG:   -Wall -Wextra -Wno-unused-parameter -g -ggdb -std=c++11 -fPIC -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Wno-unknown-pragmas
CMAKE_CXX_FLAGS_RELEASE: -Wall -Wextra -Wno-unused-parameter -O3  -ffast-math -funroll-loops -std=c++11 -fPIC -D__extern_always_inline=inline -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DNDEBUG -Wno-unknown-pragmas
CMAKE_INSTALL_PREFIX: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla
BUILD_SHARED_LIBS: yes
INTEGER_CLASS : FLINT
HAVE_SYMENGINE_GMP: yes
WITH_SYMENGINE_ASSERT: no
WITH_SYMENGINE_RCP: yes
WITH_SYMENGINE_TEUCHOS: no
WITH_COTIRE: yes
HAVE_GCC_ABI_DEMANGLE: yes
HAVE_C_FUNCTION_NOT_FUNC: no
HAVE_DEFAULT_CONSTRUCTORS: yes
HAVE_SYMENGINE_NOEXCEPT: yes
HAVE_SYMENGINE_IS_CONSTRUCTIBLE: yes
HAVE_SYMENGINE_RESERVE: yes
HAVE_SYMENGINE_STD_TO_STRING: TRUE
WITH_SYMENGINE_THREAD_SAFE: yes
BUILD_TESTS: yes
BUILD_BENCHMARKS: no
BUILD_BENCHMARKS_NONIUS: no
WITH_GMP: yes
GMP_INCLUDE_DIRS: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include
GMP_LIBRARIES: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/lib/libgmp.so
WITH_BFD: no
WITH_ECM: no
WITH_PRIMESIEVE: no
WITH_FLINT: yes
FLINT_INCLUDE_DIRS: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include
FLINT_LIBRARIES: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/lib/libflint.so
WITH_ARB: no
WITH_MPFR: yes
MPFR_INCLUDE_DIRS: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include
MPFR_LIBRARIES: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/lib/libmpfr.so
WITH_PIRANHA: no
WITH_LLVM: yes
LLVM_INCLUDE_DIRS: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include
WITH_BOOST: no
WITH_PTHREAD: no
WITH_MPC: yes
MPC_INCLUDE_DIRS: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include
MPC_LIBRARIES: /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/lib/libmpc.so
WITH_TCMALLOC: no
WITH_OPENMP: no
WITH_VIRTUAL_TYPEID: no

--------------------------------------------------------------------------------

-- Configuring done
-- Generating done
-- Build files have been written to: /conda-bld/symengine_1525163530667/work/build
[  1%] Generating CXX unity source symengine/cotire/symengine_CXX_unity.cxx
[  1%] Generating CXX prefix source symengine/cotire/symengine_CXX_prefix.cxx
[  2%] Generating CXX prefix header symengine/cotire/symengine_CXX_prefix.hxx
[  3%] Building CXX precompiled header symengine/cotire/symengine_CXX_prefix.hxx.pch
In file included from /conda-bld/symengine_1525163530667/work/build/symengine/cotire/symengine_CXX_prefix.hxx:4:
In file included from /conda-bld/symengine_1525163530667/work/build/symengine/cotire/symengine_CXX_prefix.cxx:28:
In file included from /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include/llvm/ExecutionEngine/ExecutionEngine.h:25:
In file included from /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include/llvm/IR/DataLayout.h:27:
In file included from /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include/llvm/IR/DerivedTypes.h:24:
In file included from /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include/llvm/IR/Type.h:18:
In file included from /conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include/llvm/ADT/APFloat.h:20:
/conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include/llvm/ADT/APInt.h:81:25: error: expected member name or ';' after declaration specifiers
  static const WordType WORD_MAX = ~WordType(0);
  ~~~~~~~~~~~~~~~~~~~~~ ^
/conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/include/flint/flint.h:122:18: note: expanded from macro 'WORD_MAX'
#define WORD_MAX LONG_MAX
                 ^
/conda-bld/symengine_1525163530667/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/lib/clang/6.0.0/include/limits.h:63:19: note: expanded from macro 'LONG_MAX'
#define LONG_MAX  __LONG_MAX__
                  ^
<built-in>:68:22: note: expanded from here
#define __LONG_MAX__ 9223372036854775807L
                     ^
1 error generated.
CMake Error at /conda-bld/symengine_1525163530667/work/cmake/cotire.cmake:1826 (message):
  cotire: error 1 precompiling
  /conda-bld/symengine_1525163530667/work/build/symengine/cotire/symengine_CXX_prefix.hxx.
Call Stack (most recent call first):
  /conda-bld/symengine_1525163530667/work/cmake/cotire.cmake:3421 (cotire_precompile_prefix_header)

gmake[2]: *** [symengine/cotire/symengine_CXX_prefix.hxx.pch] Error 1
gmake[1]: *** [symengine/CMakeFiles/symengine.dir/all] Error 2
gmake: *** [all] Error 2
Traceback (most recent call last):
  File "/opt/conda/bin/conda-build", line 6, in <module>
    sys.exit(conda_build.cli.main_build.main())
  File "/opt/conda/lib/python3.6/site-packages/conda_build/cli/main_build.py", line 420, in main
    execute(sys.argv[1:])
  File "/opt/conda/lib/python3.6/site-packages/conda_build/cli/main_build.py", line 411, in execute
    verify=args.verify)
  File "/opt/conda/lib/python3.6/site-packages/conda_build/api.py", line 199, in build
    notest=notest, need_source_download=need_source_download, variants=variants)
  File "/opt/conda/lib/python3.6/site-packages/conda_build/build.py", line 2105, in build_tree
    notest=notest,
  File "/opt/conda/lib/python3.6/site-packages/conda_build/build.py", line 1377, in build
    utils.check_call_env(cmd, env=env, cwd=src_dir, stats=build_stats)
  File "/opt/conda/lib/python3.6/site-packages/conda_build/utils.py", line 301, in check_call_env
    return _func_defaulting_env_to_os_environ('call', *popenargs, **kwargs)
  File "/opt/conda/lib/python3.6/site-packages/conda_build/utils.py", line 280, in _func_defaulting_env_to_os_environ
    raise subprocess.CalledProcessError(proc.returncode, _args)
subprocess.CalledProcessError: Command '['/bin/bash', '-e', '/conda-bld/symengine_1525163530667/work/conda_build.sh']' returned non-zero exit status 2.
isuruf commented 6 years ago

Can you show the error log without cotire? cmake -DWITH_COTIRE=no?

bjodah commented 6 years ago

Disabling cotire (https://github.com/bjodah/symengine-feedstock/commit/95ff469fc3af8ac892b706f8c28199b1baf719a7) seems like it solves this particular issue. I get a linking error but it looks completely unrelated to flint:

[ 40%] Linking CXX executable test_rcp
../../libsymengine.so.0.3.0: undefined reference to `llvm::createCFGSimplificationPass(unsigned int, bool, bool, bool, bool, std::__1::function<bool (llvm::Function const&)>)'
../../libsymengine.so.0.3.0: undefined reference to `llvm::EngineBuilder::EngineBuilder(std::__1::unique_ptr<llvm::Module, std::__1::default_delete<llvm::Module> >)'
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)
isuruf commented 6 years ago

Can you post the output of make VERBOSE=1?

bjodah commented 6 years ago

Sure: https://pastebin.com/Wy6PsyCS

isuruf commented 6 years ago

LLVM itself was compiled with libstdc++ on conda-forge and you are compiling symengine with libc++.

bjodah commented 6 years ago

I see. So it's unrelated as I suspected. I don't think I'll dig into that issue specifically though. But good to know that disabling cotire can act as a work around for the name collision between flint & LLVM.

isuruf commented 6 years ago

You can remove the line at https://github.com/bjodah/symengine-feedstock/commit/95ff469fc3af8ac892b706f8c28199b1baf719a7#diff-44a73bcc045c193c3bd45da87994b03bR8 to fix it.

I'll keep this issue open to disable cotire when flint and llvm are both enabled.