Creating and using pure llvm toolchain for C ++ on linux

Assuming this is possible, could someone tell me how to configure cmake to create a "clean" llvm toolchain on ubuntu-16.04 consisting of

  • clang
  • DNU
  • Lib ++
  • libc ++ abi
  • libunwind (llvm)
  • compiler-RT
  • any other parts that may be relevant and "ready for production"

The resulting compiler should

  • be as fast as possible (optimization is enabled, no unnecessary statements or other checks in the binary of the compiler)
  • installed in a separate local directory (allows you to call it <llvm_install>)
  • have no llvm tolchain dependencies provided by the package manager
  • The default is libC ++, libC ++ abi, etc.
  • (ubsan, address, memory, thread) (, , , lib++ a )

  • llvm http://llvm.org/git/llvm.git <llvm_root>
  • clang from http://llvm.org/git/clang.git <llvm_root>/tools/clang
  • lld from http://llvm.org/git/lld.git <llvm_root>/tools/lld
  • compiler-rt, libcxx, libcxxabi, libunwind from http://llvm.org/git/<project_name> <llvm_root>/projects/<project_name>

ccmake - , - , , - . , ccmake, , , .

: g++ , , (, LTO).

Btw: chandler
Pacifi++ 2017: Chandler Carruth" LLVM: ++

+4
1

, LLVM/Clang, - libc++ libc++abi. , LLVM , . , , , , . script :

cmake
-G Ninja \
-DCMAKE_EXPORT_COMPILE_COMMANDS=On \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DBUILD_SHARED_LIBS=On \
-DLLVM_ENABLE_ASSERTIONS=Off \
-DLLVM_TARGETS_TO_BUILD="X86" \
-DLLVM_ENABLE_SPHINX=Off \
-DLLVM_ENABLE_THREADS=On \
-DLIBCXX_ENABLE_EXCEPTIONS=On \
-DLIBCXX_ENABLE_RTTI=On \
-DCMAKE_INSTALL_PREFIX=[path-to-install-dir] \
[path-to-source-dir]

clang PATH, script ( ..). , CMakeLists.txt .

LLVM_TOOLCHAIN_LIB_DIR=$(llvm-config --libdir)
LD_FLAGS=""
LD_FLAGS="${LD_FLAGS} -Wl,-L ${LLVM_TOOLCHAIN_LIB_DIR}"
LD_FLAGS="${LD_FLAGS} -Wl,-rpath-link ${LLVM_TOOLCHAIN_LIB_DIR}"
LD_FLAGS="${LD_FLAGS} -lc++ -lc++abi"

CXX_FLAGS=""
CXX_FLAGS="${CXX_FLAGS} -stdlib=libc++ -pthread"

CC=clang CXX=clang++ \
cmake -G Ninja \
-DCMAKE_EXPORT_COMPILE_COMMANDS=On \
-DBUILD_SHARED_LIBS=On \
-DLLVM_ENABLE_LIBCXX=On \
-DLLVM_ENABLE_LIBCXXABI=On \
-DLLVM_ENABLE_ASSERTIONS=On \
-DLLVM_TARGETS_TO_BUILD="X86" \
-DLLVM_ENABLE_SPHINX=Off \
-DLLVM_ENABLE_THREADS=On \
-DLLVM_INSTALL_UTILS=On \
-DLIBCXX_ENABLE_EXCEPTIONS=On \
-DLIBCXX_ENABLE_RTTI=On \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CXX_FLAGS="${CXX_FLAGS}" \
-DCMAKE_SHARED_LINKER_FLAGS="${LD_FLAGS}" \
-DCMAKE_MODULE_LINKER_FLAGS="${LD_FLAGS}" \
-DCMAKE_EXE_LINKER_FLAGS="${LD_FLAGS}" \
-DCMAKE_POLICY_DEFAULT_CMP0056=NEW \
-DCMAKE_POLICY_DEFAULT_CMP0058=NEW \
-DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
[path-to-source-dir]

, , , , , libc.

, , - . , , .

PS: LLVM 3.7 3.9 6.0.0.

. , gold linker ld. LTO .

+2

Source: https://habr.com/ru/post/1689305/


All Articles