summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Joldasov <bratishkaerik@getgoogleoff.me>2023-11-17 00:05:24 +0600
committerSam James <sam@gentoo.org>2023-11-22 11:36:50 +0000
commit907ccc13308ae0393eb165b43d4fc5a9e5af0ae5 (patch)
tree04b6eb29534362b4068b00ff4dd31dde18110e30 /dev-lang/zig
parentdev-lang/zig{,-bin}: fix getconf patch for instances with whitespaces in betw... (diff)
downloadgentoo-907ccc13308ae0393eb165b43d4fc5a9e5af0ae5.tar.gz
gentoo-907ccc13308ae0393eb165b43d4fc5a9e5af0ae5.tar.bz2
gentoo-907ccc13308ae0393eb165b43d4fc5a9e5af0ae5.zip
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@getgoogleoff.me> Closes: https://github.com/gentoo/gentoo/pull/33868 Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'dev-lang/zig')
-rw-r--r--dev-lang/zig/metadata.xml3
-rw-r--r--dev-lang/zig/zig-9999.ebuild64
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>proxy-maint@gentoo.org</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() {