Dear all,
I want to build an LLVM pass by using CMake.
After reading the ralevant part of the documentation (http://llvm.org/releases/3.1/docs/CMake.html#passdev),
I copied the files in the llvm/lib/Transforms/Hello to another folder in order to give a try.
Then I renamed the folder as Hello2.
Then I have changed CMakeLists.txt as following:
cmake_minimum_required(VERSION 2.8)
A convenience variable:
set(LLVM_ROOT “…/llvm_cmake_build” CACHE PATH “Root of LLVM install.”)
A bit of a sanity check:
if( NOT EXISTS ${LLVM_ROOT}/include/llvm )
message(FATAL_ERROR “LLVM_ROOT (${LLVM_ROOT}) is not a valid LLVM install”)
endif()
We incorporate the CMake features provided by LLVM:
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} “${LLVM_ROOT}/share/llvm/cmake”)
include(LLVMConfig)
find_package(LLVM)
if( NOT LLVM_FOUND )
message(FATAL_ERROR “LLVM package can’t be found. Set CMAKE_PREFIX_PATH variable to LLVM’s installation prefix.”)
endif()
Define add_llvm_* macro’s.
include(AddLLVM)
add_definitions(${LLVM_DEFINITIONS})
include_directories(${LLVM_INCLUDE_DIRS})
link_directories(${LLVM_LIBRARY_DIRS})
add_llvm_loadable_module( LLVMHello
Hello.cpp
)
Furthermore, I created a separate build and install directories in order to build and install my pass.
cd Hello2_build
cmake …/Hello2 -DCMAKE_INSTALL_PREFIX=…/Hello2_install/
– The C compiler identification is GNU
– The CXX compiler identification is GNU
– Check for working C compiler: /usr/bin/gcc
– Check for working C compiler: /usr/bin/gcc – works
– Detecting C compiler ABI info
– Detecting C compiler ABI info - done
– Check for working CXX compiler: /usr/bin/c++
– Check for working CXX compiler: /usr/bin/c++ – works
– Detecting CXX compiler ABI info
– Detecting CXX compiler ABI info - done
– Configuring done
– Generating done
It seems that cmake is ok. When I run make install, it gives errors (see below) and i think the reason is that it can not find the directory to llvm header files.
I could not figure it out which variable to set and how to use it in order to point the required directory ?
( as in the make pass build which requires LLVM_SRC_ROOT LLVM_OBJ_ROOT variables to be set)
Hello2/Hello.cpp:17:23: error: llvm/Pass.h: No such file or directory
Hello2/Hello.cpp:18:27: error: llvm/Function.h: No such file or directory
Hello2/Hello.cpp:19:38: error: llvm/Support/raw_ostream.h: No such file or directory
Hello2/Hello.cpp:20:32: error: llvm/ADT/Statistic.h: No such file or directory
Hello2/Hello.cpp:21: error: ‘llvm’ is not a namespace-name
…
Your feedback is very welcome.
Thanks.