[llvm-dev] Building A Project Against LLVM

Neil Nelson via llvm-dev llvm-dev at lists.llvm.org
Fri May 15 18:53:33 PDT 2020


Rarrum,

Kubuntu 20.04 LTS is available. You may be able to upgrade to 19.10, and 
then to 20.04 without reinstalling. It can be done on Xubuntu. A direct 
upgrade to 20.04 should become available. LLVM 10 then installs from the 
distribution packages. I put all this on a VM using KVM/QEMU to keep it 
isolated from my primary desktop environment. Building a 20.04 VM after 
upgrading to 20.04 appears to give a faster VM. Use llvm's linker lld.

The cmake version for 20.04 is 3.16.3 which should help with llvm's 
recommended version.

Neil

On 5/15/20 12:05 AM, Rarrum via llvm-dev wrote:
> I decided to start playing around with building my own programming 
> language recently, and to use LLVM to handle the assembly-level 
> details.  I'm on Kubuntu 18.04, and I started out using LLVM 6.0 from 
> Kubuntu's packages.  I put together code for dealing with my language, 
> then went over the Kaleidoscope tutorials (which have been extremely 
> helpful btw!).  I was able to successfully get my own compiler to 
> generate IR using LLVM, use PassManager to write that to a native .o 
> file, use gcc to link that, and execute a tiny program written in my 
> own language.
>
> I also decided it was a good time to learn CMake, so I set up my 
> project using that.  The CMakeLists.txt file I'm using is essentially 
> just taken from: 
> https://llvm.org/docs/CMake.html#embedding-llvm-in-your-project - 
> though originally it would not link.  From scouring the internet I 
> made 2 changes to get that working: replaced "support core irreader" 
> with "all", and replaced "${llvm_libs}" with just "LLVM".
>
> However as I was starting to play with setting up JIT, I hit more 
> differences between the version of LLVM in Kubuntu and the version the 
> examples and documentation were written against.  So I decided to try 
> to update to a newer version of LLVM.. and this is where I've been 
> stuck for several days now.  Here are the steps I've taken:
>
> * Uninstalled any llvm packages I could find from Kubuntu's package 
> manager.
> * Followed the getting started guide: 
> https://llvm.org/docs/GettingStarted.html - I git cloned LLVM, checked 
> out the 10.0.0 tag, ran cmake as instructed, with the Release type.  
> When that completed successfully I ran sudo ninja install.
> * I then went back to my project and adjusted a couple places to 
> successfully compile against the new version.
> * At this point I put "${llvm_libs}" in the CMakeLists.txt file back 
> to match the example.  However I was getting a massive wall of link 
> errors.
> * I assumed I must have built LLVM incorrectly somehow, so in an 
> effort to undo that install, I deleted everything I could find under 
> /usr/local that had LLVM in its name, downloaded the 10.0 release from 
> https://releases.llvm.org/download.html for ubuntu 18.04, and 
> extracted that all to /usr/local.
> * I can still successfully compile, but not link.
>
> At this point I'm not sure what to try next.  Is there additional 
> documentation somewhere for how to "install" a current release of LLVM 
> correctly?
>
>
> For reference here's my final CMakeLists.txt file:
>
> cmake_minimum_required(VERSION 3.10)
>
> project(CBreakCompiler)
>
> set(CMAKE_CXX_STANDARD 17)
> set(CMAKE_CXX_STANDARD_REQUIRED True)
> add_compile_options(-Wall)
>
> find_package(LLVM 10.0.0 REQUIRED CONFIG)
>
> message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
> message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
>
> include_directories(${LLVM_INCLUDE_DIRS})
> add_definitions(${LLVM_DEFINITIONS})
>
> add_executable(CBreakCompiler
>     src/main.cpp
>     src/Parser.cpp
>     src/SourceTokenizer.cpp
>     src/IRCompiler.cpp
>     src/CompiledOutput.cpp)
>
> llvm_map_components_to_libnames(llvm_libs all)
> target_link_libraries(CBreakCompiler ${llvm_libs})
>
>
> And a snippet from the cmake output corresponding to those message lines:
>
> -- Found LLVM 10.0.0
> -- Using LLVMConfig.cmake in: /usr/local/lib/cmake/llvm
>
>
> There are dozens of link errors.. the first few and last few are:
>
> CMakeFiles/CBreakCompiler.dir/src/main.cpp.o:(.data.rel+0x0): 
> undefined reference to `llvm::DisableABIBreakingChecks'
> CMakeFiles/CBreakCompiler.dir/src/main.cpp.o: In function 
> `std::default_delete<llvm::LLVMContext>::operator()(llvm::LLVMContext*) 
> const':
> main.cpp:(.text._ZNKSt14default_deleteIN4llvm11LLVMContextEEclEPS1_[_ZNKSt14default_deleteIN4llvm11LLVMContextEEclEPS1_]+0x1e): 
> undefined reference to `llvm::LLVMContext::~LLVMContext()'
> ...
> CMakeFiles/CBreakCompiler.dir/src/CompiledOutput.cpp.o:(.data.rel.ro 
> <http://data.rel.ro>+0xe0): undefined reference to 
> `llvm::raw_ostream::anchor()'
> CMakeFiles/CBreakCompiler.dir/src/CompiledOutput.cpp.o:(.data.rel.ro 
> <http://data.rel.ro>+0xf8): undefined reference to `typeinfo for 
> llvm::raw_pwrite_stream'
> CMakeFiles/CBreakCompiler.dir/src/CompiledOutput.cpp.o:(.data.rel.ro 
> <http://data.rel.ro>+0x110): undefined reference to `typeinfo for 
> llvm::raw_ostream'
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200515/9ec506f4/attachment.html>


More information about the llvm-dev mailing list