| # Copyright 2021 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| EAPI=6 |
| |
| inherit cros-constants cmake-multilib git-2 cros-llvm toolchain-funcs |
| |
| DESCRIPTION="lldb-server, for the LLDB debugger" |
| HOMEPAGE="https://github.com/llvm/llvm-project" |
| SRC_URI="" |
| EGIT_REPO_URI="${CROS_GIT_HOST_URL}/external/github.com/llvm/llvm-project |
| ${CROS_GIT_HOST_URL}/external/github.com/llvm/llvm-project" |
| EGIT_BRANCH=main |
| |
| LLVM_HASH="cd442157cff4aad209ae532cbf031abbe10bc1df" # r422132 |
| LLVM_NEXT_HASH="0fe7531b75e54909a7cb7f7080634ab2053964ad" # r433403 |
| |
| LICENSE="|| ( UoI-NCSA MIT )" |
| SLOT="0" |
| KEYWORDS="*" |
| IUSE="cros_host llvm-next llvm-tot" |
| RDEPEND="" |
| |
| DEPEND="${RDEPEND} |
| sys-libs/ncurses" |
| |
| # CMAKE_BUILD_TYPE and CMAKE_MAKEFILE_GENERATOR are called by |
| # cmake-utils_src_configure and cmake-utils_src_make (which is called |
| # from cmake-utils_src_compile), respectively (see |
| # third_party/portage-stable/eclass/cmake-utils.eclass. |
| # shellcheck disable=SC2034 |
| CMAKE_BUILD_TYPE=Release |
| # shellcheck disable=SC2034 |
| CMAKE_MAKEFILE_GENERATOR=ninja |
| |
| pkg_setup() { |
| use cros_host && die "lldb is not supported for building on non-device builds" |
| |
| # Setup llvm toolchain for cross-compilation |
| setup_cross_toolchain |
| export CMAKE_USE_DIR="${S}/lldb" |
| } |
| |
| src_unpack() { |
| if use llvm-next || use llvm-tot; then |
| export EGIT_COMMIT="${LLVM_NEXT_HASH}" |
| else |
| export EGIT_COMMIT="${LLVM_HASH}" |
| fi |
| git-2_src_unpack |
| } |
| |
| src_prepare() { |
| cmake-utils_src_prepare |
| "${FILESDIR}"/patch_manager/patch_manager.py \ |
| --svn_version "$(get_most_recent_revision)" \ |
| --patch_metadata_file "${FILESDIR}"/PATCHES.json \ |
| --filesdir_path "${FILESDIR}" \ |
| --src_path "${S}" || die |
| |
| eapply_user |
| } |
| |
| build_llvm_host() { |
| echo "Building host llvm tools" |
| mkdir llvm_build_host |
| pushd llvm_build_host || die |
| local libdir=$(get_libdir) |
| local mycmakeargs=( |
| "${mycmakeargs[@]}" |
| "-DLLVM_ENABLE_PROJECTS=llvm;clang;lldb" |
| "-DLLVM_LIBDIR_SUFFIX=${libdir#lib}" |
| "-DCMAKE_INSTALL_PREFIX=${PREFIX}" |
| "-DLLVM_TARGETS_TO_BUILD=X86" |
| "-DLLVM_BUILD_TOOLS=OFF" |
| "-DLLVM_BUILD_TESTS=OFF" |
| "-DLLVM_INCLUDE_TESTS=OFF" |
| "-DLLVM_INCLUDE_DOCS=OFF" |
| "-DLLVM_INCLUDE_UTILS=OFF" |
| "-DLLVM_BUILD_UTILS=OFF" |
| "-DLLVM_USE_HOST_TOOLS=OFF" |
| "-DLLVM_ENABLE_ZLIB=OFF" |
| "-DLLVM_BUILD_TESTS=OFF" |
| "-DLLVM_INCLUDE_TESTS=OFF" |
| "-DLLVM_INCLUDE_DOCS=OFF" |
| "-DLLVM_INCLUDE_UTILS=OFF" |
| "-DLLVM_BUILD_UTILS=OFF" |
| "-DLLVM_USE_HOST_TOOLS=OFF" |
| "-DLLVM_ENABLE_ZLIB=OFF" |
| "-DCLANG_BUILD_TOOLS=OFF" |
| "-DCLANG_ENABLE_ARCMT=OFF" |
| "-DCLANG_ENABLE_STATIC_ANALYZER=OFF" |
| "-DCLANG_INCLUDE_TESTS=OFF" |
| "-DCLANG_INCLUDE_DOCS=OFF" |
| "-DLLVM_ENABLE_IDE=ON" |
| "-DLLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION=OFF" |
| "-DCLANG_LINK_CLANG_DYLIB=OFF" |
| "-DLLVM_BUILD_LLVM_DYLIB=OFF" |
| "-DLLVM_LINK_LLVM_DYLIB=OFF" |
| "-DLLVM_INCLUDE_EXAMPLES=OFF" |
| "-DLLVM_INCLUDE_RUNTIMES=OFF" |
| "-DLLVM_INCLUDE_BENCHMARKS=OFF" |
| "-DLLDB_ENABLE_PYTHON=OFF" |
| "-DLLDB_ENABLE_LIBEDIT=OFF" |
| "-DLLDB_ENABLE_CURSES=OFF" |
| ) |
| tc-env_build cmake -GNinja "${mycmakeargs[@]}" "${S}/llvm" |
| ninja llvm-tblgen clang-tblgen lldb-tblgen |
| popd || die |
| } |
| |
| build_llvm() { |
| echo "Cross-compiling llvm and clang libraries" |
| mkdir llvm_build |
| pushd llvm_build || die |
| local libdir=$(get_libdir) |
| local mycmakeargs=( |
| "${mycmakeargs[@]}" |
| "-DLLVM_ENABLE_PROJECTS=llvm;clang" |
| "-DLLVM_LIBDIR_SUFFIX=${libdir#lib}" |
| "-DCMAKE_INSTALL_PREFIX=${PREFIX}" |
| "-DLLVM_BUILD_TOOLS=OFF" |
| "-DLLDB_EXTERNAL_CLANG_RESOURCE_DIR=$(tc-getCC --print-resource-dir)" |
| "-DLLDB_INCLUDE_TESTS=OFF" |
| "-DLLVM_TABLEGEN=../llvm_build_host/bin/llvm-tblgen" |
| "-DCLANG_TABLEGEN=../llvm_build_host/bin/clang-tblgen" |
| "-DLLVM_BUILD_TESTS=OFF" |
| "-DLLVM_INCLUDE_TESTS=OFF" |
| "-DLLVM_INCLUDE_DOCS=OFF" |
| "-DLLVM_INCLUDE_UTILS=OFF" |
| "-DLLVM_BUILD_UTILS=OFF" |
| "-DLLVM_USE_HOST_TOOLS=OFF" |
| "-DLLVM_ENABLE_ZLIB=OFF" |
| "-DCLANG_BUILD_TOOLS=OFF" |
| "-DCLANG_ENABLE_ARCMT=OFF" |
| "-DCLANG_ENABLE_STATIC_ANALYZER=OFF" |
| "-DCLANG_INCLUDE_TESTS=OFF" |
| "-DCLANG_INCLUDE_DOCS=OFF" |
| "-DLLVM_ENABLE_IDE=ON" |
| "-DLLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION=OFF" |
| "-DCLANG_LINK_CLANG_DYLIB=OFF" |
| "-DLLVM_BUILD_LLVM_DYLIB=OFF" |
| "-DLLVM_LINK_LLVM_DYLIB=OFF" |
| "-DLLVM_INCLUDE_EXAMPLES=OFF" |
| "-DLLVM_INCLUDE_RUNTIMES=OFF" |
| "-DLLVM_INCLUDE_BENCHMARKS=OFF" |
| "-DLLDB_ENABLE_PYTHON=OFF" |
| "-DLLDB_ENABLE_LIBEDIT=OFF" |
| "-DLLDB_ENABLE_CURSES=OFF" |
| ) |
| cmake -GNinja "${mycmakeargs[@]}" "${S}/llvm" |
| # shellcheck disable=SC2034 |
| local clangLibs=( |
| libclangAST.a |
| libclangCodeGen.a |
| libclangDriver.a |
| libclangEdit.a |
| libclangFrontend.a |
| libclangLex.a |
| libclangParse.a |
| libclangRewrite.a |
| libclangRewriteFrontend.a |
| libclangSema.a |
| libclangSerialization.a |
| ) |
| # shellcheck disable=SC2034 |
| local llvmLibs=( |
| libLLVMCore.a |
| libLLVMExecutionEngine.a |
| libLLVMipo.a |
| libLLVMMCJIT.a |
| libLLVMDebugInfoDWARF.a |
| libLLVMDemangle.a |
| libLLVMBinaryFormat.a |
| libLLVMDebugInfoPDB.a |
| ) |
| # reduced list of targets but fragile. |
| ninja llvm-config clang-headers llvm-headers llvm-libraries clang-libraries |
| popd || die |
| } |
| |
| src_configure() { |
| build_llvm_host |
| build_llvm |
| local libdir=$(get_libdir) |
| local mycmakeargs=( |
| "${mycmakeargs[@]}" |
| "-DLLVM_LIBDIR_SUFFIX=${libdir#lib}" |
| "-DCMAKE_INSTALL_PREFIX=${PREFIX}" |
| "-DLLDB_EXTERNAL_CLANG_RESOURCE_DIR=$(tc-getCC --print-resource-dir)" |
| "-DLLDB_INCLUDE_TESTS=OFF" |
| "-DCMAKE_CROSSCOMPILING=ON" |
| "-DLLVM_BUILD_TESTS=OFF" |
| "-DLLVM_INCLUDE_TESTS=OFF" |
| "-DLLVM_INCLUDE_DOCS=OFF" |
| "-DLLVM_INCLUDE_UTILS=OFF" |
| "-DLLVM_BUILD_UTILS=OFF" |
| "-DLLVM_USE_HOST_TOOLS=OFF" |
| "-DLLDB_ENABLE_LUA=OFF" |
| "-DLLVM_ENABLE_IDE=ON" |
| "-DLLDB_ENABLE_PYTHON=OFF" |
| "-DLLDB_ENABLE_LIBEDIT=OFF" |
| "-DLLDB_ENABLE_CURSES=OFF" |
| "-DLLDB_TABLEGEN_EXE=${PWD}/llvm_build_host/bin/lldb-tblgen" |
| "-DLLVM_TABLEGEN=${PWD}/llvm_build_host/bin/llvm-tblgen" |
| "-DLLVM_DIR=${PWD}/llvm_build/lib/cmake/llvm" |
| "-DLLVM_BINARY_DIR=${PWD}/llvm_build" |
| "-DLLVM_HOST_TRIPLE=${CHOST}" |
| ) |
| |
| append-cppflags "-I${S}/llvm/include" |
| append-cppflags "-I${S}/clang/include" |
| append-cppflags "-I${PWD}/llvm_build/include" |
| append-cppflags "-I${PWD}/llvm_build/tools/clang/include" |
| append-ldflags "-L${PWD}/llvm_build/lib" |
| append-ldflags "-L${PWD}/llvm_build/tools/clang/lib" |
| |
| echo "configuring lldb" |
| cmake-utils_src_configure |
| } |
| |
| src_compile() { |
| cmake-utils_src_compile lldb-server |
| } |
| |
| src_install() { |
| # shellcheck disable=SC2154 |
| dobin "${BUILD_DIR}"/bin/lldb-server |
| } |