mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-08-05 00:28:09 -07:00
dev-lang/zig: add 0.15.1
Signed-off-by: Arnau Camprubí <arnauxabia@gmail.com> Part-of: https://github.com/gentoo/gentoo/pull/43546 Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
committed by
Sam James
parent
4e4f14bd8a
commit
a61ba8c1a4
@@ -3,3 +3,5 @@ DIST zig-0.13.0.tar.xz 17220728 BLAKE2B f4bbacc2012950c556bebc28fc322fc6424bf20f
|
||||
DIST zig-0.13.0.tar.xz.minisig 312 BLAKE2B 2d061257c9c75f9c36b01cfb08dcd2040538a125b9ea2cae8617ae5496e685b165933ce8981494419522b7e19b51fc69a651ecaa4a8930753acf2e4ae3d6e00f SHA512 21c6139c06cba6c5e23a3305fed0c0f1b9b32d9140bd686c26365ce0279d5f53cd081894eaba29f0c1ed51b2e831edf7bd4ae6a7eaee5018a252e312e9b65507
|
||||
DIST zig-0.14.1.tar.xz 17787696 BLAKE2B 7c571ecc775ebe953fd3a09f7f0f221c8ed613132d99142ee9fbe18202b24631a0e037dcccc759a497b5ddfde73986b609187fb10c33295ce9030a03ba39d7a3 SHA512 b2b96f241216a46503af95a1175c967ac869391cc87fcb42db2c29d9d513e7ab19c4f4ced2c078481c36aea95f412f3162a8b319aa86b5e2462af567554e8216
|
||||
DIST zig-0.14.1.tar.xz.minisig 312 BLAKE2B 51ed1fc8260617b3016f3c364729df50c8a2e9954128b94a33ce774885bb9a287d5204137ffe4f8b8ddd96ca3130317c08adac6bc950343eb162a6bfa8be2676 SHA512 27b2edc29e12396c5f57e6ef512aec10a31e59dc1ca7403769641b95782df47d975ae3bdc23d3becc52323067533b2e6dc4beaece95d1d5c382b1aec6dc8000f
|
||||
DIST zig-0.15.1.tar.xz 21359884 BLAKE2B 3768435b8e34af819dca80aea2aae881bbbf8aa999caac7cde11e8f6d303cc47e27a567a4d29742d571c63ce14ddf011de30a928c942f8009958c6570b3b3935 SHA512 8e3e99a399d1ab99c0c6d1d19a995dd8b6e15401c0c2a70d8e2a220d134bed5bec34b158b3018185cf8bb71d9ee429179d8fb3e6db05c495269ab8afd805fc3a
|
||||
DIST zig-0.15.1.tar.xz.minisig 312 BLAKE2B ca09f8883bb7f822ad028554b9bef93b9a33d937970daff4b3d7a49a569440fd9dce927aff2d16743fd05ddb3505b468954fbed14aec5f4fbf560b6e91911dc5 SHA512 478f4b428db3e20312cc8c217d3b6ee2f94653bedd4c83c9605a82f8bda27635c849167a60fa76749e471d2222e3ea4469c4932b569dd7e5d48d68012bcae463
|
||||
|
||||
175
dev-lang/zig/files/zig-0.15.1-reduce-command-new-writer.patch
Normal file
175
dev-lang/zig/files/zig-0.15.1-reduce-command-new-writer.patch
Normal file
@@ -0,0 +1,175 @@
|
||||
# https://github.com/ziglang/zig/pull/24928
|
||||
|
||||
From: Justus Klausecker <justus@klausecker.de>
|
||||
|
||||
zig reduce: adapt to new Writer API
|
||||
|
||||
diff --git a/lib/compiler/reduce.zig b/lib/compiler/reduce.zig
|
||||
index d9955b9e3383..b20a2fcba318 100644
|
||||
--- a/lib/compiler/reduce.zig
|
||||
+++ b/lib/compiler/reduce.zig
|
||||
@@ -114,10 +114,10 @@ pub fn main() !void {
|
||||
interestingness_argv.appendAssumeCapacity(checker_path);
|
||||
interestingness_argv.appendSliceAssumeCapacity(argv);
|
||||
|
||||
- var rendered = std.array_list.Managed(u8).init(gpa);
|
||||
+ var rendered: std.Io.Writer.Allocating = .init(gpa);
|
||||
defer rendered.deinit();
|
||||
|
||||
- var astgen_input = std.array_list.Managed(u8).init(gpa);
|
||||
+ var astgen_input: std.Io.Writer.Allocating = .init(gpa);
|
||||
defer astgen_input.deinit();
|
||||
|
||||
var tree = try parse(gpa, root_source_file_path);
|
||||
@@ -138,10 +138,10 @@ pub fn main() !void {
|
||||
}
|
||||
}
|
||||
|
||||
- var fixups: Ast.Fixups = .{};
|
||||
+ var fixups: Ast.Render.Fixups = .{};
|
||||
defer fixups.deinit(gpa);
|
||||
|
||||
- var more_fixups: Ast.Fixups = .{};
|
||||
+ var more_fixups: Ast.Render.Fixups = .{};
|
||||
defer more_fixups.deinit(gpa);
|
||||
|
||||
var rng = std.Random.DefaultPrng.init(seed);
|
||||
@@ -188,15 +188,14 @@ pub fn main() !void {
|
||||
try transformationsToFixups(gpa, arena, root_source_file_path, this_set, &fixups);
|
||||
|
||||
rendered.clearRetainingCapacity();
|
||||
- try tree.renderToArrayList(&rendered, fixups);
|
||||
+ try tree.render(gpa, &rendered.writer, fixups);
|
||||
|
||||
// The transformations we applied may have resulted in unused locals,
|
||||
// in which case we would like to add the respective discards.
|
||||
{
|
||||
- try astgen_input.resize(rendered.items.len);
|
||||
- @memcpy(astgen_input.items, rendered.items);
|
||||
- try astgen_input.append(0);
|
||||
- const source_with_null = astgen_input.items[0 .. astgen_input.items.len - 1 :0];
|
||||
+ try astgen_input.writer.writeAll(rendered.written());
|
||||
+ try astgen_input.writer.writeByte(0);
|
||||
+ const source_with_null = astgen_input.written()[0..(astgen_input.written().len - 1) :0];
|
||||
var astgen_tree = try Ast.parse(gpa, source_with_null, .zig);
|
||||
defer astgen_tree.deinit(gpa);
|
||||
if (astgen_tree.errors.len != 0) {
|
||||
@@ -228,12 +227,12 @@ pub fn main() !void {
|
||||
}
|
||||
if (more_fixups.count() != 0) {
|
||||
rendered.clearRetainingCapacity();
|
||||
- try astgen_tree.renderToArrayList(&rendered, more_fixups);
|
||||
+ try astgen_tree.render(gpa, &rendered.writer, more_fixups);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- try std.fs.cwd().writeFile(.{ .sub_path = root_source_file_path, .data = rendered.items });
|
||||
+ try std.fs.cwd().writeFile(.{ .sub_path = root_source_file_path, .data = rendered.written() });
|
||||
// std.debug.print("trying this code:\n{s}\n", .{rendered.items});
|
||||
|
||||
const interestingness = try runCheck(arena, interestingness_argv.items);
|
||||
@@ -273,8 +272,8 @@ pub fn main() !void {
|
||||
// Revert the source back to not be transformed.
|
||||
fixups.clearRetainingCapacity();
|
||||
rendered.clearRetainingCapacity();
|
||||
- try tree.renderToArrayList(&rendered, fixups);
|
||||
- try std.fs.cwd().writeFile(.{ .sub_path = root_source_file_path, .data = rendered.items });
|
||||
+ try tree.render(gpa, &rendered.writer, fixups);
|
||||
+ try std.fs.cwd().writeFile(.{ .sub_path = root_source_file_path, .data = rendered.written() });
|
||||
|
||||
return std.process.cleanExit();
|
||||
}
|
||||
@@ -318,7 +317,7 @@ fn transformationsToFixups(
|
||||
arena: Allocator,
|
||||
root_source_file_path: []const u8,
|
||||
transforms: []const Walk.Transformation,
|
||||
- fixups: *Ast.Fixups,
|
||||
+ fixups: *Ast.Render.Fixups,
|
||||
) !void {
|
||||
fixups.clearRetainingCapacity();
|
||||
|
||||
@@ -359,7 +358,7 @@ fn transformationsToFixups(
|
||||
other_file_ast.deinit(gpa);
|
||||
}
|
||||
|
||||
- var inlined_fixups: Ast.Fixups = .{};
|
||||
+ var inlined_fixups: Ast.Render.Fixups = .{};
|
||||
defer inlined_fixups.deinit(gpa);
|
||||
if (std.fs.path.dirname(inline_imported_file.imported_string)) |dirname| {
|
||||
inlined_fixups.rebase_imported_paths = dirname;
|
||||
@@ -382,16 +381,16 @@ fn transformationsToFixups(
|
||||
}
|
||||
}
|
||||
|
||||
- var other_source = std.array_list.Managed(u8).init(gpa);
|
||||
+ var other_source: std.io.Writer.Allocating = .init(gpa);
|
||||
defer other_source.deinit();
|
||||
- try other_source.appendSlice("struct {\n");
|
||||
- try other_file_ast.renderToArrayList(&other_source, inlined_fixups);
|
||||
- try other_source.appendSlice("}");
|
||||
+ try other_source.writer.writeAll("struct {\n");
|
||||
+ try other_file_ast.render(gpa, &other_source.writer, inlined_fixups);
|
||||
+ try other_source.writer.writeAll("}");
|
||||
|
||||
try fixups.replace_nodes_with_string.put(
|
||||
gpa,
|
||||
inline_imported_file.builtin_call_node,
|
||||
- try arena.dupe(u8, other_source.items),
|
||||
+ try arena.dupe(u8, other_source.written()),
|
||||
);
|
||||
},
|
||||
};
|
||||
diff --git a/lib/compiler/reduce/Walk.zig b/lib/compiler/reduce/Walk.zig
|
||||
index 4e41fdf1a2a9..7a448fad2172 100644
|
||||
--- a/lib/compiler/reduce/Walk.zig
|
||||
+++ b/lib/compiler/reduce/Walk.zig
|
||||
@@ -501,6 +501,10 @@ fn walkExpression(w: *Walk, node: Ast.Node.Index) Error!void {
|
||||
.@"asm",
|
||||
=> return walkAsm(w, ast.fullAsm(node).?),
|
||||
|
||||
+ .asm_legacy => {
|
||||
+ return walkAsmLegacy(w, ast.legacyAsm(node).?);
|
||||
+ },
|
||||
+
|
||||
.enum_literal => {
|
||||
return walkIdentifier(w, ast.nodeMainToken(node)); // name
|
||||
},
|
||||
@@ -665,7 +669,7 @@ fn walkStructInit(
|
||||
|
||||
fn walkCall(w: *Walk, call: Ast.full.Call) Error!void {
|
||||
try walkExpression(w, call.ast.fn_expr);
|
||||
- try walkParamList(w, call.ast.params);
|
||||
+ try walkExpressions(w, call.ast.params);
|
||||
}
|
||||
|
||||
fn walkSlice(
|
||||
@@ -830,7 +834,7 @@ fn walkWhile(w: *Walk, node_index: Ast.Node.Index, while_node: Ast.full.While) E
|
||||
}
|
||||
|
||||
fn walkFor(w: *Walk, for_node: Ast.full.For) Error!void {
|
||||
- try walkParamList(w, for_node.ast.inputs);
|
||||
+ try walkExpressions(w, for_node.ast.inputs);
|
||||
try walkExpression(w, for_node.ast.then_expr);
|
||||
if (for_node.ast.else_expr.unwrap()) |else_expr| {
|
||||
try walkExpression(w, else_expr);
|
||||
@@ -874,15 +878,12 @@ fn walkIf(w: *Walk, node_index: Ast.Node.Index, if_node: Ast.full.If) Error!void
|
||||
|
||||
fn walkAsm(w: *Walk, asm_node: Ast.full.Asm) Error!void {
|
||||
try walkExpression(w, asm_node.ast.template);
|
||||
- for (asm_node.ast.items) |item| {
|
||||
- try walkExpression(w, item);
|
||||
- }
|
||||
+ try walkExpressions(w, asm_node.ast.items);
|
||||
}
|
||||
|
||||
-fn walkParamList(w: *Walk, params: []const Ast.Node.Index) Error!void {
|
||||
- for (params) |param_node| {
|
||||
- try walkExpression(w, param_node);
|
||||
- }
|
||||
+fn walkAsmLegacy(w: *Walk, asm_node: Ast.full.AsmLegacy) Error!void {
|
||||
+ try walkExpression(w, asm_node.ast.template);
|
||||
+ try walkExpressions(w, asm_node.ast.items);
|
||||
}
|
||||
|
||||
/// Check if it is already gutted (i.e. its body replaced with `@trap()`).
|
||||
365
dev-lang/zig/zig-0.15.1.ebuild
Normal file
365
dev-lang/zig/zig-0.15.1.ebuild
Normal file
@@ -0,0 +1,365 @@
|
||||
# Copyright 2019-2025 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
LLVM_COMPAT=( 20 )
|
||||
LLVM_OPTIONAL=1
|
||||
|
||||
ZIG_SLOT="$(ver_cut 1-2)"
|
||||
ZIG_OPTIONAL=1
|
||||
|
||||
inherit check-reqs cmake flag-o-matic edo llvm-r2 toolchain-funcs zig
|
||||
|
||||
DESCRIPTION="A robust, optimal, and maintainable programming language"
|
||||
HOMEPAGE="https://ziglang.org/ https://github.com/ziglang/zig/"
|
||||
if [[ ${PV} == 9999 ]]; then
|
||||
EGIT_REPO_URI="https://github.com/ziglang/zig.git"
|
||||
inherit git-r3
|
||||
else
|
||||
VERIFY_SIG_METHOD=minisig
|
||||
VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/minisig-keys/zig-software-foundation.pub
|
||||
inherit verify-sig
|
||||
|
||||
SRC_URI="
|
||||
https://ziglang.org/download/${PV}/${P}.tar.xz
|
||||
verify-sig? ( https://ziglang.org/download/${PV}/${P}.tar.xz.minisig )
|
||||
"
|
||||
KEYWORDS="~amd64 ~arm ~arm64"
|
||||
|
||||
BDEPEND="verify-sig? ( sec-keys/minisig-keys-zig-software-foundation )"
|
||||
fi
|
||||
|
||||
# project itself: MIT
|
||||
# There are bunch of projects under "lib/" folder that are needed for cross-compilation.
|
||||
# Files that are unnecessary for cross-compilation are removed by upstream
|
||||
# and therefore their licenses (if any special) are not included.
|
||||
# lib/libunwind: Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )
|
||||
# lib/libcxxabi: Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )
|
||||
# lib/libcxx: Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )
|
||||
# lib/libc/wasi: || ( Apache-2.0-with-LLVM-exceptions Apache-2.0 MIT BSD-2 ) public-domain
|
||||
# lib/libc/musl: MIT BSD-2
|
||||
# lib/libc/mingw: ZPL public-domain BSD-2 ISC HPND
|
||||
# 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="${ZIG_SLOT}"
|
||||
IUSE="debug doc +llvm"
|
||||
REQUIRED_USE="
|
||||
!llvm? ( !doc )
|
||||
llvm? ( ${LLVM_REQUIRED_USE} )
|
||||
"
|
||||
RESTRICT="!llvm? ( test )"
|
||||
|
||||
# Used by both "cmake" and "zig" eclasses.
|
||||
BUILD_DIR="${WORKDIR}/${P}_build"
|
||||
|
||||
# Zig requires zstd and zlib compression support in LLVM, if using LLVM backend.
|
||||
# (non-LLVM backends don't require these)
|
||||
# They are not required "on their own", so please don't add them here.
|
||||
# You can check https://github.com/ziglang/zig-bootstrap in future, to see
|
||||
# options that are passed to LLVM CMake building (excluding "static" ofc).
|
||||
LLVM_DEPEND="$(llvm_gen_dep '
|
||||
llvm-core/clang:${LLVM_SLOT}
|
||||
llvm-core/lld:${LLVM_SLOT}[zstd]
|
||||
llvm-core/llvm:${LLVM_SLOT}[zstd]
|
||||
')"
|
||||
|
||||
BDEPEND+=" llvm? ( ${LLVM_DEPEND} )"
|
||||
DEPEND="llvm? ( ${LLVM_DEPEND} )"
|
||||
RDEPEND="${DEPEND}"
|
||||
IDEPEND="app-eselect/eselect-zig"
|
||||
|
||||
DOCS=( "README.md" "doc/build.zig.zon.md" )
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}/${P}-reduce-command-new-writer.patch"
|
||||
)
|
||||
|
||||
# zig.eclass does not set this for us since we use ZIG_OPTIONAL=1
|
||||
QA_FLAGS_IGNORED="usr/.*/zig/${PV}/bin/zig"
|
||||
|
||||
# Since commit https://github.com/ziglang/zig/commit/e7d28344fa3ee81d6ad7ca5ce1f83d50d8502118
|
||||
# Zig uses self-hosted compiler only
|
||||
CHECKREQS_MEMORY="4G"
|
||||
|
||||
pkg_setup() {
|
||||
# Skip detecting zig executable.
|
||||
declare -r -g ZIG_VER="${PV}"
|
||||
ZIG_EXE="not-applicable" zig_pkg_setup
|
||||
|
||||
declare -r -g ZIG_SYS_INSTALL_DEST="/usr/$(get_libdir)/zig/${PV}"
|
||||
|
||||
if use llvm; then
|
||||
[[ ${MERGE_TYPE} != binary ]] && llvm_cbuild_setup
|
||||
fi
|
||||
|
||||
# Requires running stage3 which is built for cross-target.
|
||||
if use doc && tc-is-cross-compiler; then
|
||||
die "USE=doc is not yet supported when cross-compiling"
|
||||
fi
|
||||
|
||||
check-reqs_pkg_setup
|
||||
}
|
||||
|
||||
src_unpack() {
|
||||
if [[ ${PV} == 9999 ]]; then
|
||||
git-r3_src_unpack
|
||||
else
|
||||
if use verify-sig; then
|
||||
verify-sig_verify_detached "${DISTDIR}"/${P}.tar.xz{,.minisig}
|
||||
fi
|
||||
fi
|
||||
zig_src_unpack
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
if use llvm; then
|
||||
cmake_src_prepare
|
||||
else
|
||||
# Sync with zig_src_prepare
|
||||
default_src_prepare
|
||||
mkdir -p "${BUILD_DIR}" || die
|
||||
einfo "BUILD_DIR: \"${BUILD_DIR}\""
|
||||
# "--system" mode is not used during bootstrap.
|
||||
fi
|
||||
|
||||
# Remove "limit memory usage" flags, it's already verified by
|
||||
# CHECKREQS_MEMORY and causes unneccessary errors. Upstream set them
|
||||
# according to CI OOM failures, which are not applicable to normal Gentoo build.
|
||||
sed -i -e '/\.max_rss = .*,/d' build.zig || die
|
||||
|
||||
sed -i '/exe\.allow_so_scripts = true;/d' build.zig || die
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
# Has no effect on final binary and only causes failures during bootstrapping.
|
||||
filter-lto
|
||||
|
||||
# Used during bootstrapping. stage1/stage2 have limited functionality
|
||||
# and can't resolve native target, so we pass target in exact form.
|
||||
declare -r -g ZIG_HOST_AS_TARGET="$(zig-utils_c_env_to_zig_target "${CBUILD:-${CHOST}}" "${CFLAGS}"})"
|
||||
|
||||
# Note that if we are building with CMake, "my_zbs_args"
|
||||
# are used only after compiling zig2.
|
||||
local my_zbs_args=(
|
||||
--zig-lib-dir "${S}/lib/"
|
||||
|
||||
--prefix "${EPREFIX}/${ZIG_SYS_INSTALL_DEST}/"
|
||||
--prefix-lib-dir lib/
|
||||
|
||||
# These are built separately
|
||||
-Dno-langref=true
|
||||
-Dstd-docs=false
|
||||
|
||||
# More commands and options if "debug" is enabled.
|
||||
-Ddebug-extensions=$(usex debug true false)
|
||||
# More asserts and so on by default if "debug" is enabled.
|
||||
--release=$(usex debug safe fast)
|
||||
)
|
||||
|
||||
# Scenarios of compilation:
|
||||
|
||||
# With LLVM, native:
|
||||
# CMake:
|
||||
# * generate "config.h" for LLVM libraries and build "zigcpp"
|
||||
# * build "zig2" using common "config.h" and "zigcpp"
|
||||
# build.zig:
|
||||
# * build "stage3" using common "config.h" and "zigcpp"
|
||||
|
||||
# With LLVM, cross-compiled:
|
||||
# CMake:
|
||||
# * generate cross-target "config.h" for LLVM libraries from ESYSROOT
|
||||
# and build cross-target "zigcpp", and stash them away
|
||||
# * generate native "config.h" for LLVM libraries from BROOT and
|
||||
# build native "zigcpp"
|
||||
# * build native "zig2" using native "config.h" and "zigcpp"
|
||||
# build.zig:
|
||||
# * build cross-target "stage3" using stashed "config.h" and "zigcpp"
|
||||
|
||||
# Without LLVM:
|
||||
# bootstrap.c:
|
||||
# * build native "zig2"
|
||||
# build.zig:
|
||||
# * build (cross-)target "stage3"
|
||||
|
||||
if use llvm; then
|
||||
my_zbs_args+=(
|
||||
-Denable-llvm=true
|
||||
-Dstatic-llvm=false
|
||||
-Dconfig_h="${BUILD_DIR}/config.h"
|
||||
)
|
||||
else
|
||||
my_zbs_args+=(
|
||||
-Denable-llvm=false
|
||||
)
|
||||
fi
|
||||
zig_src_configure
|
||||
|
||||
if use llvm; then
|
||||
local mycmakeargs=(
|
||||
-DZIG_SHARED_LLVM=ON
|
||||
-DZIG_USE_LLVM_CONFIG=ON
|
||||
-DZIG_HOST_TARGET_TRIPLE="${ZIG_HOST_AS_TARGET}"
|
||||
# Don't set ZIG_TARGET_TRIPLE, ZIG_TARGET_MCPU and
|
||||
# CMAKE_INSTALL_PREFIX because we build up to zig2 max,
|
||||
# after that "zig build" is used to compile stage3.
|
||||
|
||||
# Don't set CMAKE_PREFIX_PATH because "llvm_chost_setup"
|
||||
# and "llvm_cbuild_setup" already set PATH in such way
|
||||
# that suitable llvm-config is found and used in
|
||||
# "cmake/Findllvm.cmake", and "cmake.eclass" help with
|
||||
# cross-compilation pathes for "Findclang" and "Findlld".
|
||||
|
||||
# CMP0144, Zig has own packages with these names, so ignore
|
||||
# LLVM_ROOT, Clang_ROOT, LLD_ROOT from "llvm_chost_setup".
|
||||
-DCMAKE_FIND_USE_PACKAGE_ROOT_PATH=OFF
|
||||
)
|
||||
if tc-is-cross-compiler; then
|
||||
# Enable cross-compilation for CMake when filling "config.h"
|
||||
# and building "zigcpp". They would be used for stage3 build.
|
||||
# Here we are using LLVM from ESYSROOT/DEPEND.
|
||||
# Uses script llvm-config.
|
||||
|
||||
# Isolate PATH changes in subshell so that it would not
|
||||
# affect next `cmake_src_configure` with BROOT/BDEPEND.
|
||||
(
|
||||
llvm_chost_setup
|
||||
cmake_src_configure
|
||||
cmake_build zigcpp
|
||||
)
|
||||
|
||||
mv "${BUILD_DIR}/config.h" "${T}/target_config.h" || die
|
||||
mv "${BUILD_DIR}/zigcpp/" "${T}/target_zigcpp/" || die
|
||||
rm -rf "${BUILD_DIR}" || die
|
||||
fi
|
||||
|
||||
# Force disable cross-compilation for CMake when building "zig2".
|
||||
# Here we are using LLVM from BROOT/BDEPEND.
|
||||
# Uses native llvm-config.
|
||||
|
||||
# Isolate environment changes in subshell so that it would not
|
||||
# affect next phases.
|
||||
(
|
||||
export BUILD_CFLAGS="${CFLAGS}"
|
||||
export BUILD_CXXFLAGS="${CXXFLAGS}"
|
||||
export BUILD_CPPFLAGS="${CPPFLAGS}"
|
||||
export BUILD_LDFLAGS="${LDFLAGS}"
|
||||
tc-env_build
|
||||
|
||||
unset SYSROOT
|
||||
export CHOST="${CBUILD:-${CHOST}}"
|
||||
strip-unsupported-flags
|
||||
cmake_src_configure
|
||||
)
|
||||
fi
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
if use llvm; then
|
||||
cmake_build zig2
|
||||
|
||||
if tc-is-cross-compiler; then
|
||||
rm -rf "${BUILD_DIR}/zigcpp/" || die
|
||||
rm -f "${BUILD_DIR}/config.h" || die
|
||||
|
||||
mv "${T}/target_zigcpp/" "${BUILD_DIR}/zigcpp/" || die
|
||||
mv "${T}/target_config.h" "${BUILD_DIR}/config.h" || die
|
||||
fi
|
||||
else
|
||||
cd "${BUILD_DIR}" || die
|
||||
ln -s "${S}/stage1/" . || die
|
||||
ln -s "${S}/src/" . || die
|
||||
ln -s "${S}/lib/" . || die
|
||||
|
||||
local native_cc="$(tc-getBUILD_CC)"
|
||||
"${native_cc}" -o bootstrap "${S}/bootstrap.c" || die "Zig's bootstrap.c compilation failed"
|
||||
ZIG_HOST_TARGET_TRIPLE="${ZIG_HOST_AS_TARGET}" CC="${native_cc}" edo ./bootstrap
|
||||
fi
|
||||
|
||||
cd "${BUILD_DIR}" || die
|
||||
ZIG_EXE="./zig2" zig_src_compile --prefix stage3/
|
||||
|
||||
# Requires running stage3 which is built for cross-target.
|
||||
if ! tc-is-cross-compiler; then
|
||||
./stage3/bin/zig env || die "Zig compilation failed"
|
||||
|
||||
if use doc; then
|
||||
ZIG_EXE="./stage3/bin/zig" zig_src_compile langref --prefix docgen/
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
src_test() {
|
||||
if has_version -b app-emulation/qemu; then
|
||||
ewarn "QEMU executable was found on your building system."
|
||||
ewarn "If you have qemu-binfmt (binfmt_misc) hooks enabled for"
|
||||
ewarn "foreign architectures, Zig tests might fail."
|
||||
ewarn "In this case, please disable qemu-binfmt and try again."
|
||||
fi
|
||||
|
||||
cd "${BUILD_DIR}" || die
|
||||
|
||||
# XXX: When we pass a libc installation to Zig, it will fail to find
|
||||
# the bundled libraries for targets like aarch64-macos and
|
||||
# *-linux-musl. Zig doesn't run binaries for these targets when
|
||||
# -Dskip-non-native is passed, but they are still compiled, so
|
||||
# the test will fail. There's no way to disable --libc once passed,
|
||||
# so we need to strip it from ZBS_ARGS.
|
||||
# See: https://github.com/ziglang/zig/issues/22383
|
||||
|
||||
# XXX: Also strip --release=* flags to run tests with Debug mode,
|
||||
# like upstream runs in CI. Full test suite with other modes is
|
||||
# in a sad state right now...
|
||||
(
|
||||
local -a filtered_args=()
|
||||
local i=0
|
||||
|
||||
local arg
|
||||
while (( i < ${#ZBS_ARGS[@]} )); do
|
||||
arg="${ZBS_ARGS[i]}"
|
||||
case "$arg" in
|
||||
--libc)
|
||||
(( i += 2 ))
|
||||
;;
|
||||
--release=*)
|
||||
(( i += 1 ))
|
||||
;;
|
||||
*)
|
||||
filtered_args+=("$arg")
|
||||
(( i += 1 ))
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
ZBS_ARGS=("${filtered_args[@]}")
|
||||
|
||||
ZIG_EXE="./stage3/bin/zig" zig_src_test -Dskip-non-native
|
||||
)
|
||||
}
|
||||
|
||||
src_install() {
|
||||
use doc && local HTML_DOCS=( "${BUILD_DIR}/docgen/doc/langref.html" )
|
||||
|
||||
ZIG_EXE="./zig2" zig_src_install
|
||||
|
||||
cd "${ED}/${ZIG_SYS_INSTALL_DEST}" || die
|
||||
mv lib/zig/ lib2/ || die
|
||||
rm -rf lib/ || die
|
||||
mv lib2/ lib/ || die
|
||||
dosym -r "${ZIG_SYS_INSTALL_DEST}/bin/zig" /usr/bin/zig-${PV}
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
eselect zig update ifunset || die
|
||||
|
||||
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}\" ."
|
||||
fi
|
||||
}
|
||||
|
||||
pkg_postrm() {
|
||||
eselect zig update ifunset
|
||||
}
|
||||
Reference in New Issue
Block a user