---
This adds a subpackage for libgccjit. I've tested it with the hello
world sample and it appeared to function. Its recommended to have
separate builds when `--enable-host-shared` is present as otherwise
the compiler gets slowed down which is why there is the slightly
complicated second build with a separate make install in the
subpackage.
Thanks for any feedback, I don't have much experience with the cross
compiler toolchain stuff so I may have made some mistakes.
.../gcc/0043-fix-poisoned-calloc-gccjit.patch | 63 +++++++++++++++++++
main/gcc/APKBUILD | 54 ++++++++++++++++
2 files changed, 117 insertions(+)
create mode 100644 main/gcc/0043-fix-poisoned-calloc-gccjit.patch
diff --git a/main/gcc/0043-fix-poisoned-calloc-gccjit.patch b/main/gcc/0043-fix-poisoned-calloc-gccjit.patch
new file mode 100644
index 0000000000..b4fa277c59
--- /dev/null+++ b/main/gcc/0043-fix-poisoned-calloc-gccjit.patch
@@ -0,0 +1,63 @@
+diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c+index 5bccf591a..35f5e35ef 100644+--- a/gcc/jit/jit-playback.c++++ b/gcc/jit/jit-playback.c+@@ -18,6 +18,8 @@ You should have received a copy of the GNU General Public License+ along with GCC; see the file COPYING3. If not see+ <http://www.gnu.org/licenses/>. */+++#include <pthread.h>+++ #include "config.h"+ #include "system.h"+ #include "coretypes.h"+@@ -41,8 +43,6 @@ along with GCC; see the file COPYING3. If not see+ #include "diagnostic.h"+ #include "stmt.h"++-#include <pthread.h>+-+ #include "jit-playback.h"+ #include "jit-result.h"+ #include "jit-builtins.h"+diff --git a/gcc/jit/jit-recording.c b/gcc/jit/jit-recording.c+index a237d574f..5785e3269 100644+--- a/gcc/jit/jit-recording.c++++ b/gcc/jit/jit-recording.c+@@ -18,6 +18,8 @@ You should have received a copy of the GNU General Public License+ along with GCC; see the file COPYING3. If not see+ <http://www.gnu.org/licenses/>. */+++#include <pthread.h>+++ #include "config.h"+ #include "system.h"+ #include "coretypes.h"+@@ -25,8 +27,6 @@ along with GCC; see the file COPYING3. If not see+ #include "pretty-print.h"+ #include "toplev.h"++-#include <pthread.h>+-+ #include "jit-builtins.h"+ #include "jit-recording.h"+ #include "jit-playback.h"+diff --git a/gcc/jit/libgccjit.c b/gcc/jit/libgccjit.c+index f9c33c63c..75f21d275 100644+--- a/gcc/jit/libgccjit.c++++ b/gcc/jit/libgccjit.c+@@ -18,12 +18,13 @@ You should have received a copy of the GNU General Public License+ along with GCC; see the file COPYING3. If not see+ <http://www.gnu.org/licenses/>. */+++#include <pthread.h>+++ #include "config.h"+ #include "system.h"+ #include "coretypes.h"+ #include "timevar.h"+ #include "typed-splay-tree.h"+ #include "cppbuiltin.h"+-#include <pthread.h>++ #include "libgccjit.h"
diff --git a/main/gcc/APKBUILD b/main/gcc/APKBUILD
index 9f44332a05..96c38b8f59 100644
--- a/main/gcc/APKBUILD+++ b/main/gcc/APKBUILD
@@ -27,6 +27,7 @@ replaces="libstdc++ binutils"
: "${LANG_GO:=true}"
: "${LANG_FORTRAN:=true}"
: "${LANG_ADA:=true}"
+: "${LANG_JIT:=true}"_libgomp=true
_libgcc=true
@@ -46,6 +47,7 @@ if [ "$CHOST" != "$CTARGET" ]; then
LANG_GO=false
LANG_FORTRAN=false
LANG_D=false
+ LANG_JIT=false _libgomp=false
_libatomic=false
_libitm=false
@@ -83,6 +85,7 @@ elif [ "$CBUILD" != "$CHOST" ]; then
LANG_GO=false
LANG_FORTRAN=false
LANG_D=false
+ LANG_JIT=false STRIP_FOR_TARGET=${CROSS_COMPILE}strip
_builddir="$srcdir/build-cross-native"
@@ -162,6 +165,9 @@ if $LANG_ADA; then
[ "$CBUILD" = "$CTARGET" ] && makedepends_build="$makedepends_build gcc-gnat-bootstrap"
[ "$CBUILD" != "$CTARGET" ] && makedepends_build="$makedepends_build gcc-gnat gcc-gnat$_cross"
fi
+if $LANG_JIT; then+ subpackages="$subpackages libgccjit::$CTARGET_ARCH libgccjit$_target:libgccjit"+fimakedepends="$makedepends_build $makedepends_host"
# when using upstream releases, use this URI template
@@ -214,6 +220,7 @@ source="https://dev.alpinelinux.org/~nenolod/gcc-${pkgver}.tar.xz
0040-configure-Add-enable-autolink-libatomic-use-in-LINK_.patch
0041-Use-generic-errstr.go-implementation-on-musl.patch
0042-configure-fix-detection-of-atomic-builtins-in-libato.patch
+ 0043-fix-poisoned-calloc-gccjit.patch "
# we build out-of-tree
@@ -317,6 +324,38 @@ build() {
export CFLAGS="$CFLAGS -O2"
+ if $LANG_JIT; then+ mkdir -p "$_builddir"+ cd "$_builddir"+ "$_gccdir"/configure --prefix=/usr \+ --mandir=/usr/share/man \+ --infodir=/usr/share/info \+ --build=${CBUILD} \+ --host=${CHOST} \+ --target=${CTARGET} \+ --with-pkgversion="Alpine $pkgver" \+ --enable-checking=release \+ --disable-fixed-point \+ --disable-libstdcxx-pch \+ --disable-multilib \+ --disable-nls \+ --disable-werror \+ $_symvers \+ --enable-__cxa_atexit \+ --enable-default-pie \+ --enable-default-ssp \+ --enable-cloog-backend \+ --enable-languages=jit \+ $_arch_configure \+ $_libc_configure \+ $_cross_configure \+ $_bootstrap_configure \+ --with-system-zlib \+ --enable-host-shared \+ $_hash_style_configure+ make+ mv "$_builddir" "$srcdir"/gccjitbuild+ fi mkdir -p "$_builddir"
cd "$_builddir"
"$_gccdir"/configure --prefix=/usr \
@@ -661,6 +700,20 @@ gnat() {
mv "$pkgdir"/usr/bin/*gnat* "$subpkgdir"/usr/bin/
}
+libgccjit() {+ mkdir -p "$subpkgdir"/$_gcclibdir/include+ mkdir -p "$subpkgdir"/build++ cd $srcdir/gccjitbuild+ make -j1 DESTDIR="$subpkgdir"/build install++ mv "$subpkgdir"/build/usr/include/libgccjit*.h \+ "$subpkgdir"/$_gcclibdir/include+ mv "$subpkgdir"/build/usr/lib/libgccjit.so* \+ "$subpkgdir"/usr/lib/+ rm -rf "$subpkgdir"/build+}+sha512sums="
93dfd2d92cd9ff61d288df85f588907286108f9524c46bcb1c09010ed051dec18cc04ddaec2e0194fb4236ad2df3202b27eee8536c4b9818cf31504eea97dbeb gcc-10.3.1_git20210921.tar.xz
eb9e3b118e327dd241cb0ce453f659ddfdbcba2069d85ec5095a0125b397feac03ca340b41519bd44372ff61ed9de5159cdd7bcd060e26a8704f7437f9402f0c 0001-posix_memalign.patch
@@ -705,4 +758,5 @@ d415c887d281b24694deec41a445edf4d48add45caf8e3431c49528f2cfbf1f8a029f03af768ac02
932900fabd81671d403e55b0c19a7a4af46d482ee6cb90463861236b14b66a3a0fdcf5f9583e2ea45a5549e2bedf95307d5f6609c9af9cf92af3e5d2ade315cd 0040-configure-Add-enable-autolink-libatomic-use-in-LINK_.patch
03b56f4d62af44000c11c5c3dc7a83225392cfbae2a08035cafe4f915710944a04dfc6af106f9371b4fa2167e03da222b38c7b9cebd64493575431543ae3c453 0041-Use-generic-errstr.go-implementation-on-musl.patch
2624a6c862e0804e0a1163d2d2a4e4fb563ae1f66d9ea8aea40b851c8d31c4764bb1ff6241478a9c23c019e8bd7d351d2cd9b8f746bb3debc29104130937f2b0 0042-configure-fix-detection-of-atomic-builtins-in-libato.patch
+5a15a1c7514e7d979dd4bd2b50ad6e9fa66242cb1819f2ea4dc16223236267dd549fa61b9a070daeb4328059c88d0b0d46d1081b8e308f3652fa0378ed7f8f57 0043-fix-poisoned-calloc-gccjit.patch"
--
2.33.0
On Wed, 13 Oct 2021 21:42:14 +0100, Alex McGrath wrote:
> +++ b/main/gcc/0043-fix-poisoned-calloc-gccjit.patch> @@ -0,0 +1,63 @@> +diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c
Please submit all patches to gcc to my Alpine GCC patches tree first, as the ihstructions in the APKBUILD outline. The patches should include a commit message which describes the rationale and upstream status of the patch.
At the very least, that metadata should be present so that I can import the patch myself.
--
via https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/26404#note_185364
On Wed, 13 Oct 2021 21:42:14 +0100, Alex McGrath wrote:
> export CFLAGS="$CFLAGS -O2"> > + if $LANG_JIT; then
That works okay but adding `--enable-shared-host` is also required which causes the rest of the compiler to slow down.
>From https://gcc.gnu.org/install/configure.html:
```
--enable-host-shared
Specify that the host code should be built into position-independent machine code (with -fPIC), allowing it to be used within shared libraries, but yielding a slightly slower compiler.
This option is required when building the libgccjit.so library.
Contrast with --enable-shared, which affects target libraries.
```
--
via https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/26404#note_185367