Apocrypha

javy-8.0.0-r5bennypowers

# Copyright 2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

CRATES="
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]+wasi-snapshot-preview1
	[email protected]+wasi-0.2.4
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]+zstd.1.5.7
	[email protected]
"

RUST_MIN_VER="1.85.0"
RUST_REQ_USE="rust_sysroots_wasm"

inherit cargo

DESCRIPTION="JavaScript to WebAssembly toolchain"
HOMEPAGE="https://github.com/bytecodealliance/javy"
SRC_URI="
	https://github.com/bytecodealliance/javy/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
	${CARGO_CRATE_URIS}
"

LICENSE="Apache-2.0-with-LLVM-exceptions"
# Dependent crate licenses
LICENSE+="
	Apache-2.0 BSD ISC MIT MPL-2.0 Unicode-3.0 ZLIB
	|| ( Apache-2.0 MIT )
"
SLOT="0"
KEYWORDS="~amd64"

# clang is needed for cross-compiling C code to wasm32-wasip1 (QuickJS in
# rquickjs-sys) and for building binaryen C++ via wasm-opt-sys/cxx
BDEPEND="
	llvm-core/clang
"

QA_FLAGS_IGNORED="usr/bin/javy"

# Rust version is dynamic, so we download the wasm32-wasip1 stdlib at
# build time based on the detected rustc version.
RESTRICT="network-sandbox"

src_unpack() {
	cargo_src_unpack

	# Gentoo's rust_sysroots_wasm only provides wasm32-unknown-unknown.
	# Download and install wasm32-wasip1 stdlib into a local sysroot overlay.
	local rust_ver
	rust_ver="$(rustc --version | cut -d' ' -f2)" || die
	local rust_sysroot
	rust_sysroot="$(rustc --print sysroot)" || die
	local wasi_sysroot="${WORKDIR}/wasi-sysroot"

	einfo "Downloading wasm32-wasip1 stdlib for Rust ${rust_ver}..."
	wget -q "https://static.rust-lang.org/dist/rust-std-${rust_ver}-wasm32-wasip1.tar.xz" \
		-O "${T}/rust-std-wasm32-wasip1.tar.xz" \
		|| die "Failed to download wasm32-wasip1 stdlib"
	tar -xf "${T}/rust-std-wasm32-wasip1.tar.xz" -C "${T}" || die

	# Build a local sysroot: symlink the host target and libs from the
	# system sysroot, then add the downloaded wasm32-wasip1 target.
	mkdir -p "${wasi_sysroot}/lib/rustlib" || die
	ln -snf "${rust_sysroot}/lib/rustlib/x86_64-unknown-linux-gnu" \
		"${wasi_sysroot}/lib/rustlib/x86_64-unknown-linux-gnu" || die
	ln -snf "${rust_sysroot}/lib/rustlib/wasm32-unknown-unknown" \
		"${wasi_sysroot}/lib/rustlib/wasm32-unknown-unknown" || die
	cp -a "${T}/rust-std-${rust_ver}-wasm32-wasip1/rust-std-wasm32-wasip1/lib/rustlib/wasm32-wasip1" \
		"${wasi_sysroot}/lib/rustlib/" || die
	# Symlink shared libs and other rustlib contents needed by the compiler
	local f
	for f in "${rust_sysroot}/lib/rustlib"/*; do
		local base="${f##*/}"
		[[ -e "${wasi_sysroot}/lib/rustlib/${base}" ]] && continue
		ln -snf "${f}" "${wasi_sysroot}/lib/rustlib/${base}" || die
	done
	for f in "${rust_sysroot}/lib/"*.so; do
		[[ -e "${f}" ]] || continue
		ln -snf "${f}" "${wasi_sysroot}/lib/" || die
	done
}

src_compile() {
	local wasi_sysroot="${WORKDIR}/wasi-sysroot"

	# Build the default plugin for wasm32-wasip1.
	# This must happen before the CLI build, whose build.rs expects the
	# plugin at target/wasm32-wasip1/release/plugin.wasm.
	# Run in a subshell to isolate host RUSTFLAGS from the wasm build.
	(
		unset CARGO_BUILD_RUSTFLAGS CARGO_ENCODED_RUSTFLAGS RUSTFLAGS
		unset CARGO_BUILD_TARGET
		export CARGO_PROFILE_RELEASE_LTO=false
		export CARGO_PROFILE_RELEASE_STRIP=none
		export CC_wasm32_wasip1=clang
		# Point rustc at our local sysroot overlay via the target-specific
		# env var. This merges with the project's .cargo/config.toml flags
		# (e.g. -C target-feature=+simd128) rather than overriding them.
		export CARGO_TARGET_WASM32_WASIP1_RUSTFLAGS="--sysroot ${wasi_sysroot}"
		cargo build -p javy-plugin --target wasm32-wasip1 --release
	) || die "plugin build failed"

	# Build the CLI binary (its build.rs picks up and processes the plugin)
	local -x CARGO_PROFILE_RELEASE_LTO=off
	cargo_src_compile -p javy-cli
}

src_install() {
	dobin "$(cargo_target_dir)/javy"
	dodoc README.md
}