commit:     907ccc13308ae0393eb165b43d4fc5a9e5af0ae5
Author:     Eric Joldasov <bratishkaerik <AT> getgoogleoff <DOT> me>
AuthorDate: Thu Nov 16 18:05:24 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Nov 22 11:36:50 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=907ccc13

dev-lang/zig: add `llvm` USE-flag for 9999

See upstream PR https://www.github.com/ziglang/zig/pull/17994
and 
https://www.github.com/ziglang/zig/commit/f8b38a174f0c4a843688fe8adac09dc4f66cd585
 .

LLVM-less build cannot build `sys-fs/ncdu` yet (no @cImport support), but we 
are close.

Signed-off-by: Eric Joldasov <bratishkaerik <AT> getgoogleoff.me>
Closes: https://github.com/gentoo/gentoo/pull/33868
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-lang/zig/metadata.xml    |  3 +++
 dev-lang/zig/zig-9999.ebuild | 64 +++++++++++++++++++++++++++++++++++++-------
 2 files changed, 57 insertions(+), 10 deletions(-)

diff --git a/dev-lang/zig/metadata.xml b/dev-lang/zig/metadata.xml
index a5a5818faae7..ad21fd6654d5 100644
--- a/dev-lang/zig/metadata.xml
+++ b/dev-lang/zig/metadata.xml
@@ -9,6 +9,9 @@
                <email>[email protected]</email>
                <name>Proxy Maintainers</name>
        </maintainer>
+       <use>
+               <flag name="llvm">Build with LLVM backend and extensions 
enabled.</flag>
+       </use>
        <upstream>
                <remote-id type="github">ziglang/zig</remote-id>
                <bugs-to>https://github.com/ziglang/zig/issues</bugs-to>

diff --git a/dev-lang/zig/zig-9999.ebuild b/dev-lang/zig/zig-9999.ebuild
index 9605234cfc43..6e98f73a3af4 100644
--- a/dev-lang/zig/zig-9999.ebuild
+++ b/dev-lang/zig/zig-9999.ebuild
@@ -29,7 +29,8 @@ fi
 # lib/libc/glibc: BSD HPND ISC inner-net LGPL-2.1+
 LICENSE="MIT Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT ) || ( 
Apache-2.0-with-LLVM-exceptions Apache-2.0 MIT BSD-2 ) public-domain BSD-2 ZPL 
ISC HPND BSD inner-net LGPL-2.1+"
 SLOT="$(ver_cut 1-2)"
-IUSE="doc"
+IUSE="doc +llvm"
+REQUIRED_USE="!llvm? ( !doc )"
 
 BUILD_DIR="${S}/build"
 
@@ -39,9 +40,11 @@ BUILD_DIR="${S}/build"
 # You can check https://github.com/ziglang/zig-bootstrap in future, to see
 # options that are passed to LLVM CMake building (excluding "static" ofc).
 DEPEND="
-       sys-devel/clang:${LLVM_MAX_SLOT}=
-       sys-devel/lld:${LLVM_MAX_SLOT}=
-       sys-devel/llvm:${LLVM_MAX_SLOT}=[zstd]
+       llvm? (
+               sys-devel/clang:${LLVM_MAX_SLOT}=
+               sys-devel/lld:${LLVM_MAX_SLOT}=
+               sys-devel/llvm:${LLVM_MAX_SLOT}=[zstd]
+       )
 "
 
 RDEPEND="
@@ -54,6 +57,8 @@ IDEPEND="app-eselect/eselect-zig"
 # For now, Zig Build System doesn't support enviromental CFLAGS/LDFLAGS/etc.
 QA_FLAGS_IGNORED="usr/.*/zig/${PV}/bin/zig"
 
+RESTRICT="!llvm? ( test )"
+
 # Since commit 
https://github.com/ziglang/zig/commit/e7d28344fa3ee81d6ad7ca5ce1f83d50d8502118
 # Zig uses self-hosted compiler only
 CHECKREQS_MEMORY="4G"
@@ -103,14 +108,31 @@ get_zig_target() {
 }
 
 pkg_setup() {
-       llvm_pkg_setup
+       # Useful for debugging and a little bit more deterministic.
+       export ZIG_LOCAL_CACHE_DIR="${T}/zig-local-cache"
+       export ZIG_GLOBAL_CACHE_DIR="${T}/zig-global-cache"
+
+       export ZIG_SYS_INSTALL_DEST="${EPREFIX}/usr/$(get_libdir)/zig/${PV}"
+
+       use llvm && llvm_pkg_setup
        check-reqs_pkg_setup
 }
 
 src_configure() {
-       # Useful for debugging and a little bit more deterministic.
-       export ZIG_LOCAL_CACHE_DIR="${T}/zig-local-cache"
-       export ZIG_GLOBAL_CACHE_DIR="${T}/zig-global-cache"
+       if ! use llvm; then
+               mkdir -p "${BUILD_DIR}/stage3" || die
+               # Currently, Zig without LLVM extensions lacks most 
optimizations.
+               export ZIG_BOOTSTRAP_STAGE3_FLAGS=(
+                       -Dtarget="$(get_zig_target)"
+                       -Dcpu="$(get_zig_mcpu)"
+                       -Doptimize=Debug
+                       -Dno-autodocs
+                       -Dno-langref
+                       -Denable-llvm=false
+                       -Dforce-link-libc
+               )
+               return
+       fi
 
        local mycmakeargs=(
                -DZIG_USE_CCACHE=OFF
@@ -119,13 +141,20 @@ src_configure() {
                -DZIG_TARGET_MCPU="$(get_zig_mcpu)"
                -DZIG_USE_LLVM_CONFIG=ON
                -DCMAKE_PREFIX_PATH="$(get_llvm_prefix ${LLVM_MAX_SLOT})"
-               -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/$(get_libdir)/zig/${PV}"
+               -DCMAKE_INSTALL_PREFIX="${ZIG_SYS_INSTALL_DEST}"
        )
 
        cmake_src_configure
 }
 
 src_compile() {
+       if ! use llvm; then
+               $(tc-getCC) -o bootstrap bootstrap.c || die "Zig's bootstrap.c 
compilation failed"
+               edob ./bootstrap
+               edo ./zig2 build install --prefix "${BUILD_DIR}/stage3/" 
"${ZIG_BOOTSTRAP_STAGE3_FLAGS[@]}"
+               return
+       fi
+
        cmake_src_compile
 
        "${BUILD_DIR}/stage3/bin/zig" env || die "Zig compilation failed"
@@ -154,8 +183,15 @@ src_test() {
 }
 
 src_install() {
+       local DOCS=( "README.md" "doc/build.zig.zon.md" )
        use doc && local HTML_DOCS=( "docgen/doc/langref.html" "docgen/doc/std" 
)
-       cmake_src_install
+
+       if ! use llvm; then
+               DESTDIR="${D}" edo ./zig2 build install --prefix 
"${ZIG_SYS_INSTALL_DEST}" "${ZIG_BOOTSTRAP_STAGE3_FLAGS[@]}"
+               einstalldocs
+       else
+               cmake_src_install
+       fi
 
        cd "${ED}/usr/$(get_libdir)/zig/${PV}/" || die
        mv lib/zig/ lib2/ || die
@@ -166,6 +202,14 @@ src_install() {
 
 pkg_postinst() {
        eselect zig update ifunset
+
+       if ! use llvm; then
+               elog "Currently, Zig built without LLVM support lacks some"
+               elog "important features such as most optimizations, @cImport, 
etc."
+               elog "They are listed under \"Building from Source without 
LLVM\""
+               elog "section of the README file from \"/usr/share/doc/${PF}\" 
."
+               elog "It's recommended to use C backend directly with this 
stage2 build."
+       fi
 }
 
 pkg_postrm() {

Reply via email to