diff options
Diffstat (limited to 'dev-lang/zig/zig-0.9.1.ebuild')
-rw-r--r-- | dev-lang/zig/zig-0.9.1.ebuild | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/dev-lang/zig/zig-0.9.1.ebuild b/dev-lang/zig/zig-0.9.1.ebuild new file mode 100644 index 0000000..2227501 --- /dev/null +++ b/dev-lang/zig/zig-0.9.1.ebuild @@ -0,0 +1,115 @@ +# Copyright 2019-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LLVM_MAX_SLOT=13 +inherit cmake llvm check-reqs + +DESCRIPTION="A robust, optimal, and maintainable programming language" +HOMEPAGE="https://ziglang.org/" +if [[ ${PV} == 9999 ]]; then + EGIT_REPO_URI="https://github.com/ziglang/zig.git" + inherit git-r3 +else + SRC_URI="https://ziglang.org/download/${PV}/${P}.tar.xz" + KEYWORDS="~amd64 ~arm ~arm64" +fi + +LICENSE="MIT" +SLOT="0" +IUSE="test +threads" +RESTRICT="!test? ( test )" + +PATCHES=("${FILESDIR}/${P}-fix-single-threaded.patch") + +BUILD_DIR="${S}/build" + +# According to zig's author, zig builds that do not support all targets are not +# supported by the upstream project. +ALL_LLVM_TARGETS=( + AArch64 AMDGPU ARM AVR BPF Hexagon Lanai Mips MSP430 NVPTX + PowerPC RISCV Sparc SystemZ WebAssembly X86 XCore +) +ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" ) +LLVM_TARGET_USEDEPS="${ALL_LLVM_TARGETS[@]/%/(-)?}" + +IUSE="test threads ${ALL_LLVM_TARGETS[*]}" + +RDEPEND=" + sys-devel/clang:${LLVM_MAX_SLOT} + >=sys-devel/lld-${LLVM_MAX_SLOT} + <sys-devel/lld-$((${LLVM_MAX_SLOT} + 1)) + sys-devel/llvm:${LLVM_MAX_SLOT}[${LLVM_TARGET_USEDEPS// /,}] +" +DEPEND="${RDEPEND}" + +llvm_check_deps() { + has_version "sys-devel/clang:${LLVM_SLOT}" +} + +# see https://github.com/ziglang/zig/wiki/Troubleshooting-Build-Issues#high-memory-requirements +CHECKREQS_MEMORY="10G" + +pkg_setup() { + llvm_pkg_setup + check-reqs_pkg_setup +} + +src_configure() { + local mysedargs=() llvm_target arch + for target in "${ALL_LLVM_TARGETS[@]}"; do + if ! use $target; then + llvm_target=${target#llvm_targets_} + case $llvm_target in + AArch64) arch=(aarch64 aarch64_be aarch64_32);; + AMDGPU) arch=(amdgcn);; + ARM) arch=(thumb thumbeb arm armeb);; + AVR) arch=(avr);; + BPF) arch=(bpfel bpfeb);; + Hexagon) arch=(hexagon);; + Lanai) arch=(lanai);; + Mips) arch=(mips mipsel mips64 mips64el);; + MSP430) arch=(msp430);; + NVPTX) arch=(nvptx nvptx64);; + PowerPC) arch=(powerpc powerpcle powerpc64 powerpc64le);; + RISCV) arch=(riscv32 riscv64);; + Sparc) arch=(sparc sparcv9 sparcel);; + SystemZ) arch=(s390x);; + WebAssembly) arch=(wasm32 wasm64);; + X86) arch=(i386 x86_64);; + XCore) arch=(xcore);; + *) die "unhandled target" + esac + for a in ${arch[@]}; do + mysedargs+=( + -e "/^pub fn targetTriple(/,/^}/s/\.$a => .*/.$a => return error.@\"Zig compiled without LLVM $llvm_target\",/" + ) + done + mysedargs+=( + -e " + /^fn initializeLLVMTarget(/,/^}/ { + /\.$a => {/,/},$/ { + s/=>.*/=> unreachable,/ + /=>/!d + } + } + " + ) + fi + done + sed -i "${mysedargs[@]}" src/codegen/llvm.zig || die + + local mycmakeargs=( + -DZIG_USE_CCACHE=OFF + -DZIG_PREFER_CLANG_CPP_DYLIB=ON + -DZIG_SINGLE_THREADED="$(usex threads OFF ON)" + ) + + cmake_src_configure +} + +src_test() { + cd "${BUILD_DIR}" || die + ./zig build test || die +} |