summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorprospanclaudebot <[email protected]>2026-07-17 21:55:36 +0000
committerprospanclaudebot <[email protected]>2026-07-17 21:55:36 +0000
commita9eace3a222f86dc4acfa362b997245b225bde04 (patch)
tree49b9e5c12b4a2099984ba299a6c20efefed80ad8
downloadwasm-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.md23
-rwxr-xr-xcross-wasm32-wasi/gcc/files/wasm32-wasi-gcc.sh10
-rw-r--r--cross-wasm32-wasi/gcc/gcc-17.0.0_pre_wasm.ebuild46
-rw-r--r--cross-wasm32-wasi/gcc/metadata.xml7
-rw-r--r--cross-wasm32-wasi/wabt/metadata.xml3
-rw-r--r--cross-wasm32-wasi/wabt/wabt-1.0.36_p20260601.ebuild11
-rw-r--r--metadata/layout.conf4
-rw-r--r--profiles/categories1
-rw-r--r--profiles/repo_name1
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