From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 45D511580FD for ; Sat, 21 Dec 2024 16:01:11 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id A2488E08E8; Sat, 21 Dec 2024 16:00:59 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 31643E087F for ; Sat, 21 Dec 2024 16:00:58 +0000 (UTC) From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= To: gentoo-dev@lists.gentoo.org Cc: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Subject: [gentoo-dev] [PATCH 00/11] llvm-r2.eclass, to unmess pkg_setup and fix cross Date: Sat, 21 Dec 2024 16:48:33 +0100 Message-ID: <20241221160053.780079-1-mgorny@gentoo.org> X-Mailer: git-send-email 2.47.1 Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Archives-Salt: c79cbb43-132a-43cc-b589-5c93b8cc3852 X-Archives-Hash: a3be8250ef471bce7563b93184341079 Hello, Here's the newest eclass I've been working on. While llvm-r1 addressed the problems of generating dependencies and matching LLVM package versions, it retained a hacky awful pkg_setup(). This one aims to fix that. Note that the patchset contains a quick hack enabling testing the new eclass on packages using llvm-r1 -- it's obviously not intended to be merged. PR for those who prefer quality Microsoft software: https://github.com/gentoo/gentoo/pull/39696 Now, on to some details. The eclass aims to support two main uses of LLVM: as libraries to link to, and as a tools to call at build time. The default setup tries to handle both, and it will probably succeed for the general case, though to get cross right, it may require some manual manipulation. In the greatest simplification: 1. If you only link to LLVM and don't need to call anything, you need to add a DEPEND and call llvm_chost_setup. 2. If you only call LLVM tools and don't link to it, you need to add a BDEPEND and call llvm_cbuild_setup. 3. If you need both, then you add both DEPEND and BDEPEND, and call both (i.e. llvm-r2_pkg_setup). llvm_cbuild_setup is pretty similar to what the previous eclasses did. It sets PATH, but unlike the old eclasses, it uses the correct BROOT path. llvm_chost_setup combines a few methods to make it most likely for the build systems to find the correct LLVM installation. We set a bunch of variables that are used by CMake's `find_package()` function, and we generate a custom llvm-config that uses the ESYSROOT install of LLVM (except for --bindir, that refers to BROOT tools, if available). Of course, individual packages may need different scenarios. For example, sequoia-sq uses llvm-config to find libclang.so that's loaded at build-time -- it won't work correctly with llvm_chost_setup (though this will only affect cross-compilation), and needs plain llvm_cbuild_setup instead. Other packages may prefer no special setup at all and instead will want some custom configure option pointing at the LLVM installation. Overall, I think it's the best "one size fits all" tool I could come up with, and one that can be customized to fit other use cases. Please test and lemme know what you make of it. Michał Górny (11): llvm-r1.eclass: Fix list in eclassdoc llvm-r2.eclass: Copy from llvm-r1.eclass HACK! llvm-r1 -> llvm-r2 (to ease testing) llvm-utils.eclass: Support -b/-d to llvm_prepend_path llvm-r2.eclass: Readjust for BROOT, split to llvm_cbuild_setup llvm-r2.eclass: Add llvm_chost_setup, set CMake path variables llvm-r2.eclass: Generate a llvm-config script for CHOST llvm-r2.eclass: Update top-level docs for CBUILD/CHOST support llvm-r2.eclass: Remove obsolete Meson LLVM_CONFIG hack eclass/tests: Copy llvm-r1 tests to llvm-r2.sh eclass/tests/llvm-r2.sh: Add tests for llvm-config eclass/llvm-r1.eclass | 203 +---------------- eclass/llvm-r2.eclass | 474 +++++++++++++++++++++++++++++++++++++++ eclass/llvm-utils.eclass | 27 ++- eclass/tests/llvm-r2.sh | 188 ++++++++++++++++ 4 files changed, 690 insertions(+), 202 deletions(-) create mode 100644 eclass/llvm-r2.eclass create mode 100755 eclass/tests/llvm-r2.sh -- 2.47.1