[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: LLVM/JIT on MacOS X
From: |
Stefan Mahr |
Subject: |
Re: LLVM/JIT on MacOS X |
Date: |
Wed, 11 Jun 2014 23:52:28 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 |
>>>>>> Ben Abbott wrote:
>>>>>>>
>>>>>>> Carlo,
>>>>>>>
>>>>>>> Have you been successful getting JIT to work on Mac OS X? When I try,
>>>>>>> I encounter the error below.
>>>>>>>
>>>>>>> Ben
>>>>>>>
>>>>>>> [...]
>>>>>>>
>>>>>>> Undefined symbols for architecture x86_64:
>>>>>>> "llvm::verifyModule(llvm::Module const&, llvm::VerifierFailureAction,
>>>>>>> std::basic_string<char, std::char_traits<char>, std::allocator<char>
>>>>>>> >*)", referenced from:
>>>>>>> tree_jit::optimize(llvm::Function*) in
>>>>>>> libcorefcn.a(corefcn_libcorefcn_la-pt-jit.o)
>>>>>>> "llvm::raw_fd_ostream::raw_fd_ostream(char const*,
>>>>>>> std::basic_string<char, std::char_traits<char>, std::allocator<char>
>>>>>>> >&, unsigned int)", referenced from:
>>>>>>> tree_jit::optimize(llvm::Function*) in
>>>>>>> libcorefcn.a(corefcn_libcorefcn_la-pt-jit.o)
>>>>>>> "llvm::ExecutionEngine::createJIT(llvm::Module*,
>>>>>>> std::basic_string<char, std::char_traits<char>, std::allocator<char>
>>>>>>> >*, llvm::JITMemoryManager*, llvm::CodeGenOpt::Level, bool,
>>>>>>> llvm::Reloc::Model, llvm::CodeModel::Model)", referenced from:
>>>>>>> tree_jit::initialize() in
>>>>>>> libcorefcn.a(corefcn_libcorefcn_la-pt-jit.o)
>>>>>>> ld: symbol(s) not found for architecture x86_64
>>>>>>>
>>>>>>
>>>>>> Hi Ben,
>>>>>>
>>>>>> your error message sounds like a incompatibility with newer LLVM
>>>>>> versions and should be fixed with my attached patch in this bug report:
>>>>>> http://savannah.gnu.org/bugs/?41061
>>>>>>
>>>>>> As always, a rebased changeset to a more recent repository state can be
>>>>>> found here: http://inversethought.com/hg/octave-nkf/nkf-ready
>>>>>>
>>>>>> Could you try the patch?
>>>>>>
>>>>>> Stefan
>>>>>
>>>>> Patching my default branch with the changeset from bug 41061 ...
>>>>>
>>>>> $ patch -p1 < ~/Downloads/llvm-3.4-3.5pre.patch
>>>>> patching file configure.ac
>>>>> patching file libinterp/corefcn/jit-typeinfo.cc
>>>>> patching file libinterp/corefcn/jit-util.h
>>>>> patching file libinterp/corefcn/pt-jit.cc
>>>>> Hunk #2 succeeded at 2064 (offset -8 lines).
>>>>> Hunk #3 succeeded at 2187 (offset -8 lines).
>>>>> patching file libinterp/corefcn/pt-jit.h
>>>>> patching file m4/acinclude.m4
>>>>> $ make -j4
>>>>> <snip>
>>>>> </snip>
>>>>> Undefined symbols for architecture x86_64:
>>>>> "llvm::verifyModule(llvm::Module const&, llvm::VerifierFailureAction,
>>>>> std::basic_string<char, std::char_traits<char>, std::allocator<char>
>>>>> >*)", referenced from:
>>>>> tree_jit::optimize(llvm::Function*) in
>>>>> libcorefcn.a(corefcn_libcorefcn_la-pt-jit.o)
>>>>> "llvm::raw_fd_ostream::raw_fd_ostream(char const*,
>>>>> std::basic_string<char, std::char_traits<char>, std::allocator<char> >&,
>>>>> unsigned int)", referenced from:
>>>>> tree_jit::optimize(llvm::Function*) in
>>>>> libcorefcn.a(corefcn_libcorefcn_la-pt-jit.o)
>>>>> "llvm::ExecutionEngine::createJIT(llvm::Module*, std::basic_string<char,
>>>>> std::char_traits<char>, std::allocator<char> >*, llvm::JITMemoryManager*,
>>>>> llvm::CodeGenOpt::Level, bool, llvm::Reloc::Model,
>>>>> llvm::CodeModel::Model)", referenced from:
>>>>> tree_jit::initialize() in
>>>>> libcorefcn.a(corefcn_libcorefcn_la-pt-jit.o)
>>>>> ld: symbol(s) not found for architecture x86_64
>>>>>
>>>>> Ben
>>>>
>>>> bootstrap and configure is needed before starting make.
>>>
>>> Configure ran (automatically) after the patch was applied. Just to be
>>> sure, I ran bootstrap & configure manually, and still obtained the same
>>> result.
>>>
>>> Ben
>>>
>>
>> I'm really confused that compiling works, but linking fails. This usually
>> happens in the past (for me) if there are multiple versions of LLVM
>> installed (Debian/Ubuntu) or some older headerfiles were not deleted during
>> update (seen with MXE).
>>
>> E.g. for linking error with llvm::verifyModule. The header file for my
>> LLVM-3.3 installation is in <llvm/Analysis/Verifier.h>. For llvm 3.5 it's in
>> <llvm/IR/Verifier.h> with different declaration. If compiling with 3.3
>> headers and linking to 3.5 lib I would expect the same error as you get.
>> Same for llvm::raw_fd_ostream::raw_fd_ostream, since the last argument is
>> not an integer type anymore in newer LLVM versions. However, this doesn't
>> explain a link error for llvm::ExecutionEngine::createJIT. I see no
>> difference in declarions between LLVM versions 3.3 to 3.5.
>>
>> To summarise: If you only have LLVM 3.3 installed, I have no idea. Sorry.
>>
>> Stefan
>
> hmmm, it does appear there is more than one llvm present.
>
> $ port installed *llvm*
> The following ports are currently installed:
> llvm-3.3 @3.3_1
> llvm-3.3 @3.3_4 (active)
> llvm-gcc42 @2336.11_1 (active)
> llvm_select @0.2_0
> llvm_select @1.0_0 (active)
>
> I've deactivate llvm-gcc42
>
> $ sudo port deactivate llvm-gcc42
> Password:
> ---> Deactivating llvm-gcc42 @2336.11_1
> ---> Cleaning llvm-gcc42
>
> And ran configure/make again. Unfortunately, I'm still seeing the same error.
>
> Looking at "config.log", there is one problem with llvm ....
>
> configure:15039: checking llvm/IR/Function.h presence
> configure:15039: /opt/local/bin/g++-mp-4.7 -E -D__STDC_CONSTANT_MACROS
> -D__STDC_LIMIT_MACROS -isystem /opt/local/libexec/llvm-3.3/include
> -D_THREAD_SAFE -I/opt/local/include conftest.cpp
> configure:15039: $? = 0
> configure:15039: result: yes
> configure:15039: checking for llvm/IR/Function.h
> configure:15039: result: yes
> configure:15057: checking llvm/Support/IRBuilder.h usability
> configure:15057: /opt/local/bin/g++-mp-4.7 -c -pipe -O2 -m64 -D_THREAD_SAFE
> -pthread -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -isystem
> /opt/local/libexec/llvm-3.3/include -D_THREAD_SAFE -I/opt/local/include
> conftest.cpp >&5
> conftest.cpp:84:36: fatal error: llvm/Support/IRBuilder.h: No such file or
> directory
>
> Ben
>
>
The output of config.log looks OK. configure checks for presence of
llvm/Support/IRBuilder.h, but with LLVM 3.3 the header file is located
in llvm/IR/IRBuilder.h.
Does MacOS provides an own version of LLVM, independant of macports? At
least it's mentioned in [1].
-----
[1] http://anigsoc2013.wordpress.com/2013/09/11/llvm-jit-support-in/
- LLVM/JIT on MacOS X, Ben Abbott, 2014/06/10
- Aw: LLVM/JIT on MacOS X, Stefan Mahr, 2014/06/11
- Re: LLVM/JIT on MacOS X, Ben Abbott, 2014/06/11
- Aw: Re: LLVM/JIT on MacOS X, Stefan Mahr, 2014/06/11
- Re: LLVM/JIT on MacOS X, Ben Abbott, 2014/06/11
- Aw: Re: LLVM/JIT on MacOS X, Stefan Mahr, 2014/06/11
- Re: LLVM/JIT on MacOS X, Ben Abbott, 2014/06/11
- Re: LLVM/JIT on MacOS X,
Stefan Mahr <=
- Re: LLVM/JIT on MacOS X, Sebastian Schöps, 2014/06/11
- Re: LLVM/JIT on MacOS X, Ben Abbott, 2014/06/12
- Aw: Re: LLVM/JIT on MacOS X, Stefan Mahr, 2014/06/12
- Re: LLVM/JIT on MacOS X, Ben Abbott, 2014/06/12
- Aw: Re: LLVM/JIT on MacOS X, Stefan Mahr, 2014/06/12
- Re: LLVM/JIT on MacOS X, Ben Abbott, 2014/06/12
- Re: LLVM/JIT on MacOS X, Ben Abbott, 2014/06/14
- Re: LLVM/JIT on MacOS X, Ben Abbott, 2014/06/14
- Re: LLVM/JIT on MacOS X, Stefan Mahr, 2014/06/14
- Re: LLVM/JIT on MacOS X, Ben Abbott, 2014/06/14