diff --git a/sys-devel/qbe/Manifest b/sys-devel/qbe/Manifest index 5c0cb185c2782..efacf8892fa68 100644 --- a/sys-devel/qbe/Manifest +++ b/sys-devel/qbe/Manifest @@ -1 +1,2 @@ DIST qbe-1.2.tar.xz 246364 BLAKE2B b4cf4562caf6db191f1b2bfd078e2dfebfbe526a454552691ff78fba7b2d6c27b09df8ea5c795b49b9509a73b6981c17684d6e887999878f6e5bc7923c5047ef SHA512 b3ffd172e95346b3bfae1d2aff4c22a32af8bd4443d073f6fbb711f41db01f072ca7a8108901508cd4a8366567dab46510e0438716d35548591fdf37cee49971 +DIST qbe-1.3.tar.xz 281332 BLAKE2B 16e5276733d0676c7e323870fd0624484dbe46b8211da172ad179e78988cdf2b06c02ec227b1283f409df72d30405785e9c4c030c246611fae1f7b1092b66efe SHA512 5e601d62fb1a3caa6faa82b21651799459b649fa08b06c291f103118aab22a85823ee43526df1078a1d993b0bfe88e5ef14599fa6578b39900e968bc27128b8f diff --git a/sys-devel/qbe/qbe-1.3.ebuild b/sys-devel/qbe/qbe-1.3.ebuild new file mode 100644 index 0000000000000..d9f1524e9ec63 --- /dev/null +++ b/sys-devel/qbe/qbe-1.3.ebuild @@ -0,0 +1,92 @@ +# Copyright 2021-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=9 + +inherit toolchain-funcs + +if [[ ${PV} == 9999 ]]; then + EGIT_REPO_URI="git://c9x.me/qbe.git" + inherit git-r3 +else + SRC_URI="https://c9x.me/compile/release/${P}.tar.xz" + + # 64-bit RISC-V only + KEYWORDS="~amd64 ~arm64 ~riscv" +fi + +DESCRIPTION="Pure-C embeddable compiler backend" +HOMEPAGE="https://c9x.me/compile/" + +LICENSE="MIT" +SLOT="0" +IUSE="test" +RESTRICT="!test? ( test )" + +# For qbe in targets like x86_64-w64-mingw32 +BDEPEND="test? ( elibc_mingw? ( virtual/wine ) )" + +DOCS=( README doc ) + +src_prepare() { + default + + sed -i 's;^CC *=.*;CC ?= cc;' Makefile || die + + # Needs to exec test binaries and /tmp can be mounted noexec + sed -i "s;^tmp=/tmp/;tmp=${T}/;" tools/test.sh || die + + if use elibc_mingw; then + # MinGW-gcc `-o qbe` forces filename to qbe.exe instead of qbe + sed -i 's,qbe,qbe.exe,g' Makefile || die + + # same .exe adjusment, and need wine to run qbe.exe in our case + sed -i \ + -e '/^ bin=/s,qbe,qbe.exe,' \ + -e '/ amd64_win[)]/,/ ""[)]/s,bin=",bin="wine ,' \ + tools/test.sh || die + fi +} + +src_configure() { + # qbe's Makefile uses uname(1), leading to wrong default + # target when cross-compiling + if use elibc_Darwin; then + case ${CTARGET:-$CHOST} in + *aarch64*) echo '#define Deftgt T_arm64_apple' ;; + *x86_64*) echo '#define Deftgt T_amd64_apple' ;; + *) die "Unsupported target ${CTARGET:-$CHOST}" ;; + esac + elif use elibc_mingw; then + case ${CTARGET:-$CHOST} in + *x86_64*) echo '#define Deftgt T_amd64_win' ;; + *) die "Unsupported target ${CTARGET:-$CHOST}" ;; + esac + else + case ${CTARGET:-$CHOST} in + *aarch64*) echo '#define Deftgt T_arm64' ;; + *riscv64*) echo '#define Deftgt T_rv64' ;; + *x86_64*) echo '#define Deftgt T_amd64_sysv' ;; + *) die "Unsupported target ${CTARGET:-$CHOST}" ;; + esac + fi > config.h || die +} + +src_compile() { + tc-export CC + + emake CFLAGS="-std=c99 ${CPPFLAGS} ${CFLAGS}" +} + +src_test() { + if use elibc_mingw; then + TARGET=amd64_win default + else + default + fi +} + +src_install() { + einstalldocs + emake install DESTDIR="${ED}" PREFIX=/usr +} diff --git a/sys-devel/qbe/qbe-9999.ebuild b/sys-devel/qbe/qbe-9999.ebuild index 8800560bb2844..d9f1524e9ec63 100644 --- a/sys-devel/qbe/qbe-9999.ebuild +++ b/sys-devel/qbe/qbe-9999.ebuild @@ -1,7 +1,7 @@ # Copyright 2021-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 -EAPI=8 +EAPI=9 inherit toolchain-funcs @@ -20,6 +20,11 @@ HOMEPAGE="https://c9x.me/compile/" LICENSE="MIT" SLOT="0" +IUSE="test" +RESTRICT="!test? ( test )" + +# For qbe in targets like x86_64-w64-mingw32 +BDEPEND="test? ( elibc_mingw? ( virtual/wine ) )" DOCS=( README doc ) @@ -30,6 +35,17 @@ src_prepare() { # Needs to exec test binaries and /tmp can be mounted noexec sed -i "s;^tmp=/tmp/;tmp=${T}/;" tools/test.sh || die + + if use elibc_mingw; then + # MinGW-gcc `-o qbe` forces filename to qbe.exe instead of qbe + sed -i 's,qbe,qbe.exe,g' Makefile || die + + # same .exe adjusment, and need wine to run qbe.exe in our case + sed -i \ + -e '/^ bin=/s,qbe,qbe.exe,' \ + -e '/ amd64_win[)]/,/ ""[)]/s,bin=",bin="wine ,' \ + tools/test.sh || die + fi } src_configure() { @@ -41,6 +57,11 @@ src_configure() { *x86_64*) echo '#define Deftgt T_amd64_apple' ;; *) die "Unsupported target ${CTARGET:-$CHOST}" ;; esac + elif use elibc_mingw; then + case ${CTARGET:-$CHOST} in + *x86_64*) echo '#define Deftgt T_amd64_win' ;; + *) die "Unsupported target ${CTARGET:-$CHOST}" ;; + esac else case ${CTARGET:-$CHOST} in *aarch64*) echo '#define Deftgt T_arm64' ;; @@ -57,6 +78,14 @@ src_compile() { emake CFLAGS="-std=c99 ${CPPFLAGS} ${CFLAGS}" } +src_test() { + if use elibc_mingw; then + TARGET=amd64_win default + else + default + fi +} + src_install() { einstalldocs emake install DESTDIR="${ED}" PREFIX=/usr