Rakur Moski via llvm-dev
2020-Nov-05 18:00 UTC
[llvm-dev] How to use mainline clang/llvm with CMake
Dear all, I am not sure whether this is a right place to ask basic questions
about usage of CLang/LLVM, but also not sure if there is any other mailing list
for such.
Kindly point me to such a list in such case.
I had built mainline CLang/LLVM on OSX and tried to use it with CMake. I had
override following variables in CMake:
CMAKE_CXX_COMPILER=${LLVM_INSTALL_PATH}/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/bin/clang++
CMAKE_CXX_STANDARD_LIBRARIES=${LLVM_INSTALL_PATH}/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib
CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES=${LLVM_INSTALL_PATH}/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/include/c++/v1
Though the compilation works, the link stage fails, as I couldn't set the
path to newly built LLVM libcxx/libcxxabi.
Could some one please tell what is the correct way to use mainline LLVM in
CMake?
Thanks.
Rakur.
PS:
Complete verbose compile logs are available at https://pastebin.com/p3U2EQ1h
Im adding excerpt of compile/link commands and output logs below in this mail
too.
It produces the following compilation command:
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/bin/clang++
-isystem
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/include/c++/v1
-g -g -isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk
-std=c++17 -o CMakeFiles/seq_vector.dir/seq_vector.cpp.o -c
/Users/user/workspace/github/clang_build/manual/llvm-project/example/seq_vector.cpp
Verbose compile command:
"/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/bin/clang-12"
-cc1 -triple x86_64-apple-macosx10.15.0 -Wundef-prefix=TARGET_OS_
-Werror=undef-prefix -Wdeprecated-objc-isa-usage
-Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all --mrelax-relocations
-disable-free -main-file-name seq_vector.cpp -mrelocation-model pic -pic-level 2
-mframe-pointer=all -fno-rounding-math -munwind-tables
-target-sdk-version=10.15.6 -fcompatibility-qualified-id-block-type-checking
-fvisibility-inlines-hidden-static-local-var -target-cpu penryn -tune-cpu
generic -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb
-target-linker-version 609 -v -resource-dir
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib/clang/12.0.0
-isystem
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/include/c++/v1
-isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk
-stdlib=libc++ -internal-isystem
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/bin/../include/c++/v1
-internal-isystem
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/local/include
-internal-isystem
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib/clang/12.0.0/include
-internal-externc-isystem
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include
-std=c++17 -fdeprecated-macro -fdebug-compilation-dir
/Users/user/workspace/github/clang_build/manual/llvm-project/example/_build/cmake/Debug
-ferror-limit 19 -stack-protector 1 -fblocks -fencode-extended-block-signature
-fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fcxx-exceptions
-fexceptions -fmax-type-align=16 -fcolor-diagnostics -o
CMakeFiles/seq_vector.dir/seq_vector.cpp.o -x c++
/Users/user/workspace/github/clang_build/manual/llvm-project/example/seq_vector.cpp
But unfortunately, the link stage fails:
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/bin/clang++
-g -v -g -isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk
-Wl,-search_paths_first -Wl,-headerpad_max_install_names
CMakeFiles/seq_vector.dir/seq_vector.cpp.o -o seq_vector
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib
Verbose link command:
"/usr/bin/ld" -demangle -lto_library
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib/libLTO.dylib
-dynamic -arch x86_64 -platform_version macos 10.15.0 10.15.6 -syslibroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
-o seq_vector -search_paths_first -headerpad_max_install_names
CMakeFiles/seq_vector.dir/seq_vector.cpp.o
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib
-lc++ -lSystem
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib/clang/12.0.0/lib/darwin/libclang_rt.osx.a
Error:
ld: can't map file, errno=22 file
'/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib'
for architecture x86_64
-----
I had built Clang with following command:
cmake \
-H./llvm-project/llvm \
-B./llvm-project/_build \
-DCMAKE_INSTALL_PREFIX=./llvm-project/_install \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=Release \
\
-DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;compiler-rt;clang-tools-extra;libunwind;lld;pstl;"
\
-DLLVM_TARGETS_TO_BUILD="X86" \
-DCMAKE_OSX_ARCHITECTURES="x86_64" \
-DLLVM_CREATE_XCODE_TOOLCHAIN=ON \
-DDEFAULT_SYSROOT="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20201105/494d1f59/attachment.html>
Rakur Moski via llvm-dev
2020-Nov-06 17:53 UTC
[llvm-dev] How to use mainline clang/llvm with CMake
Dear all, I had managed to find answers to my question.
The following is my CMakeLists.txt
‐‐‐‐‐‐‐ CMakeLists.txt ‐‐‐‐‐‐‐
#
#
TOOLCHAIN_PATH=/Users/user/workspace/github/clang_build/manual/llvm-project/_install
# or
#
TOOLCHAIN_PATH=/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr
#
project(${PROJECT_NAME} LANGUAGES CXX)
cmake_minimum_required(VERSION 3.19)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/bin/clang++)
string(APPEND CMAKE_CXX_FLAGS " -v")
string(APPEND CMAKE_EXE_LINKER_FLAGS " -L${TOOLCHAIN_PATH}/lib")
string(APPEND CMAKE_EXE_LINKER_FLAGS "
-Wl,-rpath,${TOOLCHAIN_PATH}/lib")
string(APPEND CMAKE_EXE_LINKER_FLAGS " -v")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_executable(seq_vector seq_vector.cpp)
‐‐‐‐‐‐‐ End of CMakeLists.txt ‐‐‐‐‐‐‐
Now, I can see my include paths as
‐‐‐‐‐‐‐ Excerpt from compilation ‐‐‐‐‐‐‐
#include "..." search starts here:
#include <...> search starts here:
/Users/user/workspace/github/clang_build/manual/llvm-project/_install2/bin/../include/c++/v1
/Users/user/workspace/github/clang_build/manual/llvm-project/_install2/lib/clang/12.0.0/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks
(framework directory)
End of search list.
‐‐‐‐‐‐‐ End of Excerpt from compilation ‐‐‐‐‐‐‐
The rpath on executable is set automatically through CMake
‐‐‐‐‐‐‐ Excerpt from compilation ‐‐‐‐‐‐‐
otool -L
/Users/user/workspace/github/clang_build/manual/llvm-project/example/_build/seq_vector
/Users/user/workspace/github/clang_build/manual/llvm-project/example/_build/seq_vector:
@rpath/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version
1281.100.1)
‐‐‐‐‐‐‐ End of Excerpt from compilation ‐‐‐‐‐‐‐
And the newly built libraries are loaded when running the executable
‐‐‐‐‐‐‐ Excerpt from compilation ‐‐‐‐‐‐‐
dyld: loaded: <91A3ABCC-8A41-3CF8-A788-2527F5CC5211>
/Users/user/workspace/github/clang_build/manual/llvm-project/example/_build/seq_vector
dyld: loaded: <0DD22FCB-0487-3FC1-8EAC-CCE7A5338C73>
/Users/user/workspace/github/clang_build/manual/llvm-project/_install2/lib/libc++.1.dylib
dyld: loaded: <0A6C8BA1-30FD-3D10-83FD-FF29E221AFFE>
/usr/lib/libSystem.B.dylib
dyld: loaded: <152484F8-8B54-3D3B-97D8-C2C9C938858B>
/Users/user/workspace/github/clang_build/manual/llvm-project/_install2/lib/../lib/libc++abi.1.dylib
‐‐‐‐‐‐‐ End of Excerpt from compilation ‐‐‐‐‐‐‐
I found lot of the required information through clang documentation and
searching through mailing list; As I had to experiment several options, I lost
track of reference posts to a solid documentation.
Thank you all!
Rakur.
‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Thursday, November 5, 2020 11:30 PM, Rakur Moski via llvm-dev <llvm-dev at
lists.llvm.org> wrote:
> Dear all, I am not sure whether this is a right place to ask basic
questions about usage of CLang/LLVM, but also not sure if there is any other
mailing list for such.
> Kindly point me to such a list in such case.
>
> I had built mainline CLang/LLVM on OSX and tried to use it with CMake. I
had override following variables in CMake:
>
>
CMAKE_CXX_COMPILER=${LLVM_INSTALL_PATH}/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/bin/clang++
>
CMAKE_CXX_STANDARD_LIBRARIES=${LLVM_INSTALL_PATH}/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib
>
CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES=${LLVM_INSTALL_PATH}/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/include/c++/v1
>
> Though the compilation works, the link stage fails, as I couldn't set
the path to newly built LLVM libcxx/libcxxabi.
>
> Could some one please tell what is the correct way to use mainline LLVM in
CMake?
>
> Thanks.
> Rakur.
>
> PS:
> Complete verbose compile logs are available
at https://pastebin.com/p3U2EQ1h
> Im adding excerpt of compile/link commands and output logs below in this
mail too.
>
> It produces the following compilation command:
>
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/bin/clang++
-isystem
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/include/c++/v1
-g -g -isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk
-std=c++17 -o CMakeFiles/seq_vector.dir/seq_vector.cpp.o -c
/Users/user/workspace/github/clang_build/manual/llvm-project/example/seq_vector.cpp
>
> Verbose compile command:
>
"/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/bin/clang-12"
-cc1 -triple x86_64-apple-macosx10.15.0 -Wundef-prefix=TARGET_OS_
-Werror=undef-prefix -Wdeprecated-objc-isa-usage
-Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all --mrelax-relocations
-disable-free -main-file-name seq_vector.cpp -mrelocation-model pic -pic-level 2
-mframe-pointer=all -fno-rounding-math -munwind-tables
-target-sdk-version=10.15.6 -fcompatibility-qualified-id-block-type-checking
-fvisibility-inlines-hidden-static-local-var -target-cpu penryn -tune-cpu
generic -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb
-target-linker-version 609 -v -resource-dir
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib/clang/12.0.0
-isystem
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/include/c++/v1
-isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk
-stdlib=libc++ -internal-isystem
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/bin/../include/c++/v1
-internal-isystem
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/local/include
-internal-isystem
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib/clang/12.0.0/include
-internal-externc-isystem
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include
-std=c++17 -fdeprecated-macro -fdebug-compilation-dir
/Users/user/workspace/github/clang_build/manual/llvm-project/example/_build/cmake/Debug
-ferror-limit 19 -stack-protector 1 -fblocks -fencode-extended-block-signature
-fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fcxx-exceptions
-fexceptions -fmax-type-align=16 -fcolor-diagnostics -o
CMakeFiles/seq_vector.dir/seq_vector.cpp.o -x c++
/Users/user/workspace/github/clang_build/manual/llvm-project/example/seq_vector.cpp
>
> But unfortunately, the link stage fails:
>
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/bin/clang++
-g -v -g -isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk
-Wl,-search_paths_first -Wl,-headerpad_max_install_names
CMakeFiles/seq_vector.dir/seq_vector.cpp.o -o seq_vector
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib
>
> Verbose link command:
> "/usr/bin/ld" -demangle -lto_library
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib/libLTO.dylib
-dynamic -arch x86_64 -platform_version macos 10.15.0 10.15.6 -syslibroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
-o seq_vector -search_paths_first -headerpad_max_install_names
CMakeFiles/seq_vector.dir/seq_vector.cpp.o
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib
-lc++ -lSystem
/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib/clang/12.0.0/lib/darwin/libclang_rt.osx.a
>
> Error:
> ld: can't map file, errno=22 file
'/Users/user/workspace/github/clang_build/manual/llvm-project/_install/Toolchains/LLVM12.0.0git.xctoolchain/usr/lib'
for architecture x86_64
>
> -----
> I had built Clang with following command:
>
> cmake \
> -H./llvm-project/llvm \
> -B./llvm-project/_build \
> -DCMAKE_INSTALL_PREFIX=./llvm-project/_install \
> -G "Ninja" \
> -DCMAKE_BUILD_TYPE=Release \
> \
>
-DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;compiler-rt;clang-tools-extra;libunwind;lld;pstl;"
\
> -DLLVM_TARGETS_TO_BUILD="X86" \
> -DCMAKE_OSX_ARCHITECTURES="x86_64" \
> -DLLVM_CREATE_XCODE_TOOLCHAIN=ON \
>
-DDEFAULT_SYSROOT="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
Reasonably Related Threads
- [LLVMdev] non-x86 sanitizer buildbots: no rule to make target check-lsan etc.
- [LLVMdev] non-x86 sanitizer buildbots: no rule to make target check-lsan etc.
- [LLVMdev] How to run LLVM3.6.1 on OS X (Yosemite, Xcode6.4) OR how to link bitcode generated by OS X clang with LLVM3.6.1
- Ld64.lld cannot find Foundation framework
- Assertion triggered when running simple hello-world code on iOS device using ORC/LLLazyJIT