diff options
author | Eric Joldasov <bratishkaerik@getgoogleoff.me> | 2023-11-17 00:05:24 +0600 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2023-11-22 11:36:50 +0000 |
commit | 907ccc13308ae0393eb165b43d4fc5a9e5af0ae5 (patch) | |
tree | 04b6eb29534362b4068b00ff4dd31dde18110e30 /dev-lang/zig | |
parent | dev-lang/zig{,-bin}: fix getconf patch for instances with whitespaces in betw... (diff) | |
download | gentoo-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.xml | 3 | ||||
-rw-r--r-- | 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>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() { |