diff options
| author | prospanclaudebot <[email protected]> | 2026-07-17 21:55:36 +0000 |
|---|---|---|
| committer | prospanclaudebot <[email protected]> | 2026-07-17 21:55:36 +0000 |
| commit | a9eace3a222f86dc4acfa362b997245b225bde04 (patch) | |
| tree | 49b9e5c12b4a2099984ba299a6c20efefed80ad8 | |
| download | wasm-gcc-overlay-a9eace3a222f86dc4acfa362b997245b225bde04.tar.gz wasm-gcc-overlay-a9eace3a222f86dc4acfa362b997245b225bde04.zip | |
🌭 wasm-gcc-overlay: каркас + ебилды gcc-wasm/wabt (набросок)
cross-wasm32-wasi/{gcc,wabt}, обёртка wasm32-wasi-cc, layout.conf/profiles.
Заказ @lzcnt. Досочинить: EGIT форка gcc, оркестрацию .c->.wat->.o.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
| -rw-r--r-- | README.md | 23 | ||||
| -rwxr-xr-x | cross-wasm32-wasi/gcc/files/wasm32-wasi-gcc.sh | 10 | ||||
| -rw-r--r-- | cross-wasm32-wasi/gcc/gcc-17.0.0_pre_wasm.ebuild | 46 | ||||
| -rw-r--r-- | cross-wasm32-wasi/gcc/metadata.xml | 7 | ||||
| -rw-r--r-- | cross-wasm32-wasi/wabt/metadata.xml | 3 | ||||
| -rw-r--r-- | cross-wasm32-wasi/wabt/wabt-1.0.36_p20260601.ebuild | 11 | ||||
| -rw-r--r-- | metadata/layout.conf | 4 | ||||
| -rw-r--r-- | profiles/categories | 1 | ||||
| -rw-r--r-- | profiles/repo_name | 1 |
9 files changed, 106 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..17f3d0e --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# wasm-gcc-overlay + +Gentoo-оверлей для тулчейна **GCC → WebAssembly** (экспериментальный wasm-бэкенд GCC, форк `feedab1e`; +RFC одобрен GCC Steering Committee, июнь 2026). Пайплайн: `gcc-wasm` эмитит **WAT** → `wat2wasm` +(форк `feedab1e/wabt`) ассемблит объект → `wasm-ld` (wasi-sdk) линкует. + +## Установка оверлея +```sh +eselect repository add wasm-gcc git https://git.ancap.in.ua/lzcnt/wasm-gcc-overlay.git +emaint sync -r wasm-gcc +emerge -av cross-wasm32-wasi/gcc +``` + +## Пакеты +- `cross-wasm32-wasi/wabt` — wat2wasm (форк feedab1e) +- `cross-wasm32-wasi/gcc` — сам компилятор + обёртка `wasm32-wasi-cc` + +## Статус: НАБРОСОК +Каркас рабочий, но досочинить: +- EGIT_REPO_URI/ветку форка GCC (уточнить у feedable); +- оркестрацию обёртки `.c → .wat → .o → .wasm` (в tc/ она уже руками собрана); +- `cross-wasm32-wasi/wasi-libc` (или зависимость на `dev-libs/wasi-sdk`). +Зеркалит ручной пайплайн из нашего `tc/` (см. память бота). diff --git a/cross-wasm32-wasi/gcc/files/wasm32-wasi-gcc.sh b/cross-wasm32-wasi/gcc/files/wasm32-wasi-gcc.sh new file mode 100755 index 0000000..c77a559 --- /dev/null +++ b/cross-wasm32-wasi/gcc/files/wasm32-wasi-gcc.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# Обёртка пайплайна: GCC-wasm выдаёт WAT -> wat2wasm ассемблит -> wasm-ld линкует. +# Зеркало ручного пайплайна из tc/ (см. CLAUDE.md #83261). +set -euo pipefail +PREFIX="/usr/lib/wasm-gcc" +XGCC="${PREFIX}/bin/wasm32-wasi-xgcc" # реальный cc1/xgcc с wasm-бэкендом +WAT2WASM="$(command -v wat2wasm)" +WASMLD="$(command -v wasm-ld)" +# … парсинг -c/-o/-B, .c->.wat->.o, финальный линк wasm-ld --no-entry --allow-undefined … +exec "${XGCC}" -B"${PREFIX}/bin" "$@" # SKELETON: досочинить оркестрацию WAT->wasm diff --git a/cross-wasm32-wasi/gcc/gcc-17.0.0_pre_wasm.ebuild b/cross-wasm32-wasi/gcc/gcc-17.0.0_pre_wasm.ebuild new file mode 100644 index 0000000..cb7b1bb --- /dev/null +++ b/cross-wasm32-wasi/gcc/gcc-17.0.0_pre_wasm.ebuild @@ -0,0 +1,46 @@ +# Copyright 2026 ancap.in.ua +# Distributed under the terms of the GNU General Public License v3 +EAPI=8 +inherit git-r3 + +DESCRIPTION="GCC c экспериментальным WebAssembly-бэкендом (feedab1e): C -> WAT, ассемблится wat2wasm" +HOMEPAGE="https://gcc.gnu.org/ https://github.com/feedab1e" +# ВНИМАНИЕ: ветка/репо форка — уточнить у feedable (RFC одобрен GCC SC, июнь 2026) +EGIT_REPO_URI="https://github.com/feedab1e/gcc.git" +EGIT_BRANCH="wasm" + +LICENSE="GPL-3+ LGPL-3+ FDL-1.3+" +SLOT="0" +KEYWORDS="~amd64" +IUSE="+wat2wasm" + +CTARGET="wasm32-wasi" +BDEPEND="dev-libs/gmp dev-libs/mpfr dev-libs/mpc dev-libs/isl" +RDEPEND=" + wat2wasm? ( cross-wasm32-wasi/wabt ) + cross-wasm32-wasi/wasi-libc +" +S="${WORKDIR}/gcc" +PREFIX="/usr/lib/wasm-gcc" + +src_configure() { + # только all-gcc: рантайм-либы под wasm тянет wasi-sdk/wasi-libc отдельно + econf \ + --target="${CTARGET}" \ + --prefix="${PREFIX}" \ + --program-prefix="${CTARGET}-" \ + --enable-languages=c \ + --without-headers --with-newlib \ + --disable-shared --disable-threads --disable-libssp \ + --disable-libgomp --disable-libquadmath --disable-nls \ + --disable-bootstrap --disable-multilib +} + +src_compile() { emake all-gcc } + +src_install() { + emake DESTDIR="${D}" install-gcc + # обёртка пайплайна tc/: xgcc(WAT) -> wat2wasm(объект) -> wasm-ld(линк) + newbin "${FILESDIR}"/wasm32-wasi-gcc.sh "${CTARGET}-cc" + dosym "${CTARGET}-cc" /usr/bin/"${CTARGET}-gcc" +} diff --git a/cross-wasm32-wasi/gcc/metadata.xml b/cross-wasm32-wasi/gcc/metadata.xml new file mode 100644 index 0000000..34cc897 --- /dev/null +++ b/cross-wasm32-wasi/gcc/metadata.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <longdescription>GCC с WebAssembly-бэкендом (форк feedab1e). Компилятор эмитит WAT, + ассемблер (wat2wasm из wabt-форка) собирает объект, wasm-ld линкует.</longdescription> + <use><flag name="wat2wasm">Тянуть cross-wasm32-wasi/wabt для ассемблирования WAT</flag></use> +</pkgmetadata> diff --git a/cross-wasm32-wasi/wabt/metadata.xml b/cross-wasm32-wasi/wabt/metadata.xml new file mode 100644 index 0000000..9b9a050 --- /dev/null +++ b/cross-wasm32-wasi/wabt/metadata.xml @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata><longdescription>wat2wasm из форка feedab1e/wabt.</longdescription></pkgmetadata> diff --git a/cross-wasm32-wasi/wabt/wabt-1.0.36_p20260601.ebuild b/cross-wasm32-wasi/wabt/wabt-1.0.36_p20260601.ebuild new file mode 100644 index 0000000..98c558d --- /dev/null +++ b/cross-wasm32-wasi/wabt/wabt-1.0.36_p20260601.ebuild @@ -0,0 +1,11 @@ +# Copyright 2026 ancap.in.ua +# Distributed under the terms of the GNU General Public License v3 +EAPI=8 +inherit cmake git-r3 +DESCRIPTION="WABT (форк feedab1e): wat2wasm-ассемблер для WAT из gcc-wasm" +HOMEPAGE="https://github.com/feedab1e/wabt" +EGIT_REPO_URI="https://github.com/feedab1e/wabt.git" +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +src_configure() { local mycmakeargs=( -DBUILD_TESTS=OFF ); cmake_src_configure } diff --git a/metadata/layout.conf b/metadata/layout.conf new file mode 100644 index 0000000..b152305 --- /dev/null +++ b/metadata/layout.conf @@ -0,0 +1,4 @@ +masters = gentoo +thin-manifests = true +sign-manifests = false +repo-name = wasm-gcc diff --git a/profiles/categories b/profiles/categories new file mode 100644 index 0000000..546a8c4 --- /dev/null +++ b/profiles/categories @@ -0,0 +1 @@ +cross-wasm32-wasi diff --git a/profiles/repo_name b/profiles/repo_name new file mode 100644 index 0000000..b799b5d --- /dev/null +++ b/profiles/repo_name @@ -0,0 +1 @@ +wasm-gcc |
