Hi, The upcoming emacs 28 has native compilation feature which allows it to use gcc to compile emacs lisp files to loadable libraries by using the libgccjit library. This library is not currently provided by the lang/gcc port and I took first stab at getting it done.
The --enable-host-shared flag is required by the jit LANG but I'm not sure if it is wise to put in generic CONFIGURE_ARGS. How does this look? Timo diff 31bccecebaefd3b23c4e4dac76105b5dd0ae1159 /usr/ports blob - 0ce4997174291a22be0cc03ec2b258751be50afc file + lang/gcc/11/Makefile --- lang/gcc/11/Makefile +++ lang/gcc/11/Makefile @@ -19,8 +19,7 @@ DPB_PROPERTIES = parallel V = 11.2.0 FULL_VERSION = $V FULL_PKGVERSION = $V -REVISION = 0 -REVISION-dlang = 1 +REVISION = 1 ADASTRAP-amd64 = adastrap-amd64-$V-0.tar.xz ADASTRAP-arm = adastrap-arm-4.9.4-0.tar.xz @@ -37,6 +36,7 @@ PKGNAME-f95 = g95-${FULL_PKGVERSION} PKGNAME-objc = gobjc-${FULL_PKGVERSION} PKGNAME-ada = gnat-${FULL_PKGVERSION} PKGNAME-dlang = gdc-${FULL_PKGVERSION} +PKGNAME-jit = gcc-jit-${FULL_PKGVERSION} PKGSPEC-main = gcc->=11,<12 SHARED_LIBS = estdc++ 20.0 \ @@ -50,12 +50,13 @@ SHARED_LIBS = estdc++ 20.0 \ cc1plugin 2.0 \ cp1plugin 1.0 \ gphobos 0.0 \ - gdruntime 0.0 + gdruntime 0.0 \ + gccjit 0.0 PSEUDO_FLAVORS = no_ada full -FLAVOR ?= +FLAVOR ?= -MULTI_PACKAGES = -main -libs -f95 -objc -c++ -ada -dlang +MULTI_PACKAGES = -main -libs -f95 -objc -c++ -ada -dlang -jit MAINTAINER = Pascal Stumpf <pas...@stumpf.co> @@ -94,7 +95,7 @@ MASTER_SITES0 = https://distfiles.stumpf.co/ \ https://spacehopper.org/mirrors/ \ https://distfiles.bsdfrog.org/ -LANGS = c,c++,fortran,objc +LANGS = c,c++,fortran,objc,jit .if ${BUILD_PACKAGES:M-ada} LANGS := ${LANGS},ada DISTFILES += ${ADASTRAP-${MACHINE_ARCH}}:0 @@ -152,6 +153,7 @@ CONFIGURE_ARGS += \ --with-gnu-ld \ --with-gnu-as \ --enable-threads=posix \ + --enable-host-shared \ --enable-wchar_t \ --with-gmp="${LOCALBASE}" \ --enable-languages=${LANGS} \ @@ -226,6 +228,7 @@ WANTLIB-main = ${WANTLIB} WANTLIB-ada = ${WANTLIB} pthread util WANTLIB-dlang = ${WANTLIB} pthread WANTLIB-libs = m pthread +WANTLIB-jit = gmp m mpc mpfr z LIB_DEPENDS += devel/gmp,no_cxx,bootstrap \ devel/mpfr \ blob - /dev/null file + lang/gcc/11/patch-gcc_jit_Make-lang_in --- /dev/null +++ lang/gcc/11/patch-gcc_jit_Make-lang_in @@ -0,0 +1,37 @@ +$OpenBSD$ + +Index: gcc/jit/Make-lang.in +--- gcc/jit/Make-lang.in.orig ++++ gcc/jit/Make-lang.in +@@ -40,13 +40,15 @@ + # into the jit rule, but that needs a little bit of work + # to do the right thing within all.cross. + +-LIBGCCJIT_LINKER_NAME = libgccjit.so ++include $(top_srcdir)/../libversions ++ ++LIBGCCJIT_LINKER_NAME = libgccjit.so.$(LIBGCCJIT_VERSION_NUM) + LIBGCCJIT_VERSION_NUM = 0 + LIBGCCJIT_MINOR_NUM = 0 + LIBGCCJIT_RELEASE_NUM = 1 +-LIBGCCJIT_SONAME = $(LIBGCCJIT_LINKER_NAME).$(LIBGCCJIT_VERSION_NUM) ++LIBGCCJIT_SONAME = $(LIBGCCJIT_LINKER_NAME) + LIBGCCJIT_FILENAME = \ +- $(LIBGCCJIT_SONAME).$(LIBGCCJIT_MINOR_NUM).$(LIBGCCJIT_RELEASE_NUM) ++ $(LIBGCCJIT_SONAME).$(LIBGCCJIT_VERSION_NUM) + + LIBGCCJIT_LINKER_NAME_SYMLINK = $(LIBGCCJIT_LINKER_NAME) + LIBGCCJIT_SONAME_SYMLINK = $(LIBGCCJIT_SONAME) +@@ -275,12 +277,6 @@ check_jit_parallelize = 10 + jit.install-common: installdirs + $(INSTALL_PROGRAM) $(LIBGCCJIT_FILENAME) \ + $(DESTDIR)/$(libdir)/$(LIBGCCJIT_FILENAME) +- ln -sf \ +- $(LIBGCCJIT_FILENAME) \ +- $(DESTDIR)/$(libdir)/$(LIBGCCJIT_SONAME_SYMLINK) +- ln -sf \ +- $(LIBGCCJIT_SONAME_SYMLINK)\ +- $(DESTDIR)/$(libdir)/$(LIBGCCJIT_LINKER_NAME_SYMLINK) + $(INSTALL_DATA) $(srcdir)/jit/libgccjit.h \ + $(DESTDIR)/$(includedir)/libgccjit.h + $(INSTALL_DATA) $(srcdir)/jit/libgccjit++.h \ blob - /dev/null file + lang/gcc/11/patches/patch-gcc_jit_Make-lang_in --- /dev/null +++ lang/gcc/11/patches/patch-gcc_jit_Make-lang_in @@ -0,0 +1,45 @@ +$OpenBSD$ + +Index: gcc/jit/Make-lang.in +--- gcc/jit/Make-lang.in.orig ++++ gcc/jit/Make-lang.in +@@ -40,6 +40,8 @@ + # into the jit rule, but that needs a little bit of work + # to do the right thing within all.cross. + ++include $(top_srcdir)/../libversions ++ + LIBGCCJIT_VERSION_NUM = 0 + LIBGCCJIT_MINOR_NUM = 0 + LIBGCCJIT_RELEASE_NUM = 1 +@@ -53,11 +55,11 @@ jit: $(LIBGCCJIT_FILENAME) \ + + else + +-LIBGCCJIT_LINKER_NAME = libgccjit.so ++LIBGCCJIT_LINKER_NAME = libgccjit.so.$(LIBGCCJIT_VERSION_NUM) + +-LIBGCCJIT_SONAME = $(LIBGCCJIT_LINKER_NAME).$(LIBGCCJIT_VERSION_NUM) ++LIBGCCJIT_SONAME = $(LIBGCCJIT_LINKER_NAME) + LIBGCCJIT_FILENAME = \ +- $(LIBGCCJIT_SONAME).$(LIBGCCJIT_MINOR_NUM).$(LIBGCCJIT_RELEASE_NUM) ++ $(LIBGCCJIT_SONAME).$(LIBGCCJIT_VERSION_NUM) + + LIBGCCJIT_LINKER_NAME_SYMLINK = $(LIBGCCJIT_LINKER_NAME) + LIBGCCJIT_SONAME_SYMLINK = $(LIBGCCJIT_SONAME) +@@ -127,15 +129,6 @@ $(LIBGCCJIT_FILENAME): $(jit_OBJS) \ + $(EXTRA_GCC_OBJS) \ + $(LIBGCCJIT_EXTRA_OPTS) + @$(call LINK_PROGRESS,$(INDEX.jit),end) +- +-# Create symlinks when not building for Windows +-ifeq (,$(findstring mingw,$(target))) +-$(LIBGCCJIT_SONAME_SYMLINK): $(LIBGCCJIT_FILENAME) +- ln -sf $(LIBGCCJIT_FILENAME) $(LIBGCCJIT_SONAME_SYMLINK) +- +-$(LIBGCCJIT_LINKER_NAME_SYMLINK): $(LIBGCCJIT_SONAME_SYMLINK) +- ln -sf $(LIBGCCJIT_SONAME_SYMLINK) $(LIBGCCJIT_LINKER_NAME_SYMLINK) +-endif + + # + # Build hooks: blob - /dev/null file + lang/gcc/11/pkg/PLIST-jit --- /dev/null +++ lang/gcc/11/pkg/PLIST-jit @@ -0,0 +1,7 @@ +@comment $OpenBSD$ +include/libgccjit++.h +include/libgccjit.h +@info info/libgccjit.info +@so lib/libgccjit.so +lib/libgccjit.so.0 +@bin lib/libgccjit.so.0.0.1 blob - 5b5e2778f61201af5e80ae66e034b588f09ec5a9 file + lang/gcc/8/Makefile --- lang/gcc/8/Makefile +++ lang/gcc/8/Makefile @@ -18,7 +18,7 @@ DPB_PROPERTIES = parallel V = 8.4.0 FULL_VERSION = $V FULL_PKGVERSION = $V -REVISION = 9 +REVISION = 10 ADASTRAP-amd64 = adastrap-amd64-8.3.0-2.tar.xz ADASTRAP-arm = adastrap-arm-4.9.4-0.tar.xz @@ -34,6 +34,7 @@ PKGNAME-c++ = g++-${FULL_PKGVERSION} PKGNAME-f95 = g95-${FULL_PKGVERSION} PKGNAME-objc = gobjc-${FULL_PKGVERSION} PKGNAME-ada = gnat-${FULL_PKGVERSION} +PKGNAME-jit = gcc-jit-${FULL_PKGVERSION} PKGSPEC-main = gcc->=8,<9 SHARED_LIBS = estdc++ 19.0 \ @@ -45,12 +46,13 @@ SHARED_LIBS = estdc++ 19.0 \ quadmath 3.0 \ cc1 1.0 \ cc1plugin 1.0 \ - cp1plugin 0.0 + cp1plugin 0.0 \ + gccjit 0.0 PSEUDO_FLAVORS = no_ada full FLAVOR ?= -MULTI_PACKAGES = -main -libs -f95 -objc -c++ -ada +MULTI_PACKAGES = -main -libs -f95 -objc -c++ -ada -jit MAINTAINER = Pascal Stumpf <pas...@stumpf.co> @@ -89,7 +91,7 @@ MASTER_SITES0 = https://distfiles.stumpf.co/ \ https://spacehopper.org/mirrors/ \ https://distfiles.bsdfrog.org/ -LANGS = c,c++,fortran,objc +LANGS = c,c++,fortran,objc,jit .if ${BUILD_PACKAGES:M-ada} LANGS := ${LANGS},ada DISTFILES += ${ADASTRAP-${MACHINE_ARCH}}:0 @@ -133,6 +135,7 @@ CONFIGURE_ARGS += \ --enable-threads=posix \ --enable-wchar_t \ --with-gmp="${LOCALBASE}" \ + --enable-host-shared \ --enable-languages=${LANGS} \ --disable-libstdcxx-pch \ --enable-default-ssp \ @@ -197,6 +200,7 @@ RUN_DEPENDS-libs = WANTLIB-main = ${WANTLIB} WANTLIB-ada = ${WANTLIB} pthread util WANTLIB-libs = m pthread z +WANTLIB-jit = gmp m mpc mpfr z LIB_DEPENDS += devel/gmp,no_cxx,bootstrap \ devel/mpfr \ blob - /dev/null file + lang/gcc/8/patches/patch-gcc_jit_Make-lang_in --- /dev/null +++ lang/gcc/8/patches/patch-gcc_jit_Make-lang_in @@ -0,0 +1,37 @@ +$OpenBSD$ + +Index: gcc/jit/Make-lang.in +--- gcc/jit/Make-lang.in.orig ++++ gcc/jit/Make-lang.in +@@ -40,13 +40,15 @@ + # into the jit rule, but that needs a little bit of work + # to do the right thing within all.cross. + +-LIBGCCJIT_LINKER_NAME = libgccjit.so ++include $(top_srcdir)/../libversions ++ ++LIBGCCJIT_LINKER_NAME = libgccjit.so.$(LIBGCCJIT_VERSION_NUM) + LIBGCCJIT_VERSION_NUM = 0 + LIBGCCJIT_MINOR_NUM = 0 + LIBGCCJIT_RELEASE_NUM = 1 +-LIBGCCJIT_SONAME = $(LIBGCCJIT_LINKER_NAME).$(LIBGCCJIT_VERSION_NUM) ++LIBGCCJIT_SONAME = $(LIBGCCJIT_LINKER_NAME) + LIBGCCJIT_FILENAME = \ +- $(LIBGCCJIT_SONAME).$(LIBGCCJIT_MINOR_NUM).$(LIBGCCJIT_RELEASE_NUM) ++ $(LIBGCCJIT_SONAME).$(LIBGCCJIT_VERSION_NUM) + + LIBGCCJIT_LINKER_NAME_SYMLINK = $(LIBGCCJIT_LINKER_NAME) + LIBGCCJIT_SONAME_SYMLINK = $(LIBGCCJIT_SONAME) +@@ -275,12 +277,6 @@ check_jit_parallelize = 10 + jit.install-common: installdirs + $(INSTALL_PROGRAM) $(LIBGCCJIT_FILENAME) \ + $(DESTDIR)/$(libdir)/$(LIBGCCJIT_FILENAME) +- ln -sf \ +- $(LIBGCCJIT_FILENAME) \ +- $(DESTDIR)/$(libdir)/$(LIBGCCJIT_SONAME_SYMLINK) +- ln -sf \ +- $(LIBGCCJIT_SONAME_SYMLINK)\ +- $(DESTDIR)/$(libdir)/$(LIBGCCJIT_LINKER_NAME_SYMLINK) + $(INSTALL_DATA) $(srcdir)/jit/libgccjit.h \ + $(DESTDIR)/$(includedir)/libgccjit.h + $(INSTALL_DATA) $(srcdir)/jit/libgccjit++.h \ blob - /dev/null file + lang/gcc/8/pkg/PLIST-jit --- /dev/null +++ lang/gcc/8/pkg/PLIST-jit @@ -0,0 +1,5 @@ +@comment $OpenBSD: PLIST-jit,v$ +@lib lib/libgccjit.so.${LIBgccjit_VERSION} +include/libgccjit++.h +include/libgccjit.h +@info info/libgccjit.info blob - /dev/null file + lang/gcc/DESCR-jit --- /dev/null +++ lang/gcc/DESCR-jit @@ -0,0 +1,12 @@ +The GNU Compiler Collection (GCC) includes front ends for C, C++, +Objective-C, Fortran, Java, and Ada, as well as libraries for these +languages (libstdc++, libgcj,...). + +GCC development is a part of the GNU Project and uses an open +development environment. Its supports many other platforms in order to +foster a world-class optimizing compiler, to attract a larger team of +developers, to ensure that GCC and the GNU system work on multiple +architectures and diverse environments, and to more thoroughly test and +extend the features of GCC. + +This package contains the Just-In-Time compiler plugin. blob - 9859085de151d690ce2ae655166a9f476104cba7 file + lang/gcc/Makefile.inc --- lang/gcc/Makefile.inc +++ lang/gcc/Makefile.inc @@ -18,6 +18,7 @@ COMMENT-objc= ${COM}: obj C compiler COMMENT-ada= ${COM}: Ada compiler COMMENT-go= ${COM}: Go compiler COMMENT-dlang= ${COM}: D compiler +COMMENT-jit= ${COM}: JIT compiler PKGNAME?= gcc-${FULL_PKGVERSION} PKGNAME-libs?= gcc-libs-${FULL_PKGVERSION} @@ -28,6 +29,7 @@ PKGNAME-objc?= gobjc-${FULL_PKGVERSION} PKGNAME-ada?= gnat-${FULL_PKGVERSION} PKGNAME-go?= gccgo-${FULL_PKGVERSION} PKGNAME-dlang?= gdc-${FULL_PKGVERSION} +PKGNAME-jit?= gcc-jit-${FULL_PKGVERSION} DESCR-main ?= ${PORTSDIR}/lang/gcc/DESCR DESCR-libs ?= ${PORTSDIR}/lang/gcc/DESCR-libs @@ -38,6 +40,7 @@ DESCR-objc ?= ${PORTSDIR}/lang/gcc/DESCR-objc DESCR-ada ?= ${PORTSDIR}/lang/gcc/DESCR-ada DESCR-go ?= ${PORTSDIR}/lang/gcc/DESCR-go DESCR-dlang ?= ${PORTSDIR}/lang/gcc/DESCR-dlang +DESCR-jit ?= ${PORTSDIR}/lang/gcc/DESCR-jit HOMEPAGE?= https://gcc.gnu.org/