Tuesday, October 05, 2021

Re: UPDATE: Neovim-0.5.1 and enable LuaJIT

On 2021/10/05 15:14, Edd Barrett wrote:
> On Mon, Oct 04, 2021 at 01:06:43PM +0100, Edd Barrett wrote:
> > Hi,
> >
> > This updates Neovim to the latest version and enables LuaJIT on architectures
> > where that is possible
>
> Here's a revised diff that deals with -lc++abi properly (pointed out by sthen@,
> thanks). I based the change on what lang/luajit already does. It's this part in
> the Makefile:
>
> > .include <bsd.port.arch.mk>
> > .if ${PROPERTIES:Mclang}
> > LUAJIT_TARGET_LIBS = "-lc++abi -lpthread"
> > WANTLIB += c++abi pthread
> > .endif
>
> One question though. Shouldn't `-lpthread` be `-pthread` (both here in
> editors/neoevim and in lang/luajit)? Or do we not make that distinction any
> more?

That used to be needed but has not been needed for quite a few releases now.
Might have been the move from userland to kernel-backed threads or it might
have been a later change, I don't remember which.

Looks ok to me. btw you might as well get rid of base-gcc from COMPILER,
cmake is not available without ports-gcc so base-gcc will never match.


>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/editors/neovim/Makefile,v
> retrieving revision 1.23
> diff -u -p -r1.23 Makefile
> --- Makefile 18 Jul 2021 09:18:07 -0000 1.23
> +++ Makefile 5 Oct 2021 14:09:16 -0000
> @@ -1,36 +1,61 @@
> # $OpenBSD: Makefile,v 1.23 2021/07/18 09:18:07 paco Exp $
>
> +# Use LuaJIT where possible, as some plugins assume it's available. Arches
> +# that can't use LuaJIT have to use the system Lua (and some plugins may not
> +# work).
> +.if ${MACHINE_ARCH} == "arm" || ${MACHINE_ARCH} == "aarch64" || \
> + ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" || \
> + ${MACHINE_ARCH} == "powerpc"
> +EMBED_LUAJIT = Yes
> +.else
> +EMBED_LUAJIT = No
> +.endif
> +
> COMMENT = continuation and extension of Vim
>
> GH_ACCOUNT = neovim
> GH_PROJECT = neovim
> -GH_TAGNAME = v0.5.0
> +GH_TAGNAME = v0.5.1
>
> CATEGORIES = editors devel
> HOMEPAGE = https://neovim.io
> MAINTAINER = Edd Barrett <edd@openbsd.org>
>
> -# Neovim must be statically linked with libluv, which isn't yet ported.
> +# The versions listed here must match those in third-party/CMakeLists.txt.
> LUV_VER = 1.30.1-1
> -LUV = luv-${LUV_VER}
> +LUAJIT_VER = 787736990ac3b7d5ceaba2697c7d0f58f77bb782
> +
> MASTER_SITES0 = https://github.com/luvit/luv/releases/download/${LUV_VER}/
> +MASTER_SITES1 = https://github.com/LuaJIT/LuaJIT/archive/
> DISTFILES = ${DISTNAME}${EXTRACT_SUFX} \
> - ${LUV}${EXTRACT_SUFX}:0
> + luv-${LUV_VER}${EXTRACT_SUFX}:0 \
> + luajit-{}${LUAJIT_VER}${EXTRACT_SUFX}:1
>
> -# Apache 2.0 + Vim License
> +# Neovim: Apache 2.0 + Vim License
> +# LuaJIT: MIT + public domain
> +# libluv: Apache 2.0
> PERMIT_PACKAGE = Yes
>
> DEBUG_PACKAGES = ${BUILD_PACKAGES}
>
> -WANTLIB += c iconv intl ${MODLUA_WANTLIB} m msgpackc pthread termkey
> +WANTLIB += ${COMPILER_LIBCXX} c iconv intl m msgpackc pthread termkey
> WANTLIB += tree-sitter unibilium util uv vterm
>
> +.if ${EMBED_LUAJIT} != "Yes"
> +WANTLIB += ${MODLUA_WANTLIB}
> +.endif
> +
> COMPILER = base-clang ports-gcc base-gcc
>
> MODULES = devel/cmake \
> lang/lua \
> textproc/intltool
>
> +# LuaJIT is binary compatible with Lua-5.1 extension modules, so we can use
> +# them directly, even on architectures where we will be embedding LuaJIT.
> +# https://luajit.org/extensions.html
> +MODLUA_VERSION = 5.1
> +
> BUILD_DEPENDS = ${RUN_DEPENDS} \
> devel/gperf \
> devel/lpeg \
> @@ -46,37 +71,83 @@ LIB_DEPENDS = devel/gettext,-runtime \
>
> RUN_DEPENDS += devel/libmpack/lua \
> devel/libmpack/main \
> - devel/desktop-file-utils
> -
> -MAKE_FLAGS += USE_BUNDLED=OFF
> -CONFIGURE_ARGS += -DLUA_PRG=${MODLUA_BIN} \
> + devel/desktop-file-utils \
> + devel/lua-compat53 \
> + x11/gtk+3,-guic
> +
> +SEPARATE_BUILD = Yes
> +CONFIGURE_ARGS += -DUSE_BUNDLED=OFF \
> + -DLIBLUV_INCLUDE_DIR=${STATIC_DEPS_INST}/include \
> + -DLIBLUV_LIBRARY=${STATIC_DEPS_INST}/lib/libluv.a
> +.if ${EMBED_LUAJIT} == "Yes"
> +CONFIGURE_ARGS += -DLUA_PRG=${STATIC_DEPS_INST}/bin/luajit-2.1.0-beta3 \
> + -DLUAJIT_INCLUDE_DIR=${STATIC_DEPS_INST}/include/luajit-2.1 \
> + -DLUAJIT_LIBRARY=${STATIC_DEPS_INST}/lib/libluajit-5.1.a
> +.else
> +CONFIGURE_ARGS += -DPREFER_LUA=ON \
> + -DLUA_PRG=${MODLUA_BIN} \
> -DLUA_INCLUDE_DIR=${MODLUA_INCL_DIR} \
> - -DLUA_LIBRARIES=${MODLUA_LIB} \
> - -DLIBLUV_INCLUDE_DIR=${WRKBUILD}/deps/include \
> - -DLIBLUV_LIBRARY=${WRKBUILD}/deps/lib/libluv.a \
> - -DPREFER_LUA=ON # disables LuaJIT
> + -DLUA_LIBRARIES=${MODLUA_LIB}
> +.endif
>
> # Tests need gmake
> USE_GMAKE = Yes
> # `test_startup_utf8.vim' requires either bash or zsh
> MODULES += lang/python
> MODPY_RUNDEP = No
> -MODPY_BUILDDEP = No
> +MODPY_BUILDDEP =No
> TEST_DEPENDS = shells/bash \
> editors/py-neovim \
> editors/py-neovim${MODPY_FLAVOR}
>
> -# Build libluv first as a static library. We opted not to create a libluv
> -# port because it must be built for a specific Lua version and we don't know
> -# what version future ports might need. Currently no other port requires
> -# libluv, so it's simpler to build a static library here.
> +# Move static deps source code under WRKDIST so that they can be patched.
> +STATIC_DEPS_WRKSRC=${WRKDIST}/static-deps/
> +post-extract:
> + mkdir ${STATIC_DEPS_WRKSRC}
> + mv ${WRKDIR}/LuaJIT-${LUAJIT_VER} ${STATIC_DEPS_WRKSRC}/luajit
> + mv ${WRKDIR}/luv-${LUV_VER} ${STATIC_DEPS_WRKSRC}/luv
> +
> +# Build LuaJIT (if required) and libluv as static libraries.
> +#
> +# We opted not to create a libluv port because it must be built for a specific
> +# Lua version and we don't know what version future ports might need. Currently
> +# no other port requires libluv, so it's simpler to build a static library
> +# here.
> +#
> +# Most of the libluv target is lifted from ${MODCMAKE_configure} in
> +# cmake.port.mk. Unfortunately we can't use it directly, as some of the
> +# arguments make assumptions that can't work for us here.
> #
> -# Most of this target is lifted from ${MODCMAKE_configure} in cmake.port.mk.
> -# Unfortunately we can't use it directly, as some of the arguments make
> -# assumptions that can't work for us here.
> +# Neovim plugins expect a very specific version of LuaJIT, so it only really
> +# makes sense to embed it.
> +STATIC_DEPS_WRKBUILD=${WRKBUILD}/static-deps-build
> +STATIC_DEPS_INST=${WRKBUILD}/static-deps-inst
> +.include <bsd.port.arch.mk>
> +.if ${PROPERTIES:Mclang}
> +LUAJIT_TARGET_LIBS = "-lc++abi -lpthread"
> +WANTLIB += c++abi pthread
> +.endif
> pre-configure:
> - mkdir -p ${WRKBUILD}/build
> - cd ${WRKBUILD}/build && \
> + mkdir -p ${STATIC_DEPS_WRKBUILD} ${STATIC_DEPS_PREFIX}
> +
> +.if ${EMBED_LUAJIT} == "Yes"
> + # Build LuaJIT.
> + # We can't build LuaJIT out of its src dir, so copy it so that we can
> + # support SEPARATE_BUILD.
> + cp -r ${STATIC_DEPS_WRKSRC}/luajit ${STATIC_DEPS_WRKBUILD}/luajit
> + cd ${STATIC_DEPS_WRKBUILD}/luajit/src && \
> + ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} \
> + PREFIX=${STATIC_DEPS_INST} CC=${CC} CCOPT="${CFLAGS}" \
> + CCOPT_x86="" Q="" TARGET_LIBS=${LUAJIT_TARGET_LIBS} \
> + BUILDMODE=static
> + cd ${STATIC_DEPS_WRKBUILD}/luajit && \
> + ${SETENV} ${MAKE_ENV} Q="" ${MAKE_PROGRAM} install \
> + PREFIX=${STATIC_DEPS_INST}
> +.endif
> +
> + # Build libluv.
> + mkdir -p ${STATIC_DEPS_WRKBUILD}/luv
> + cd ${STATIC_DEPS_WRKBUILD}/luv && \
> ${SETENV} CC="${CC}" \
> CXX="${CXX}" \
> CFLAGS="${CFLAGS}" \
> @@ -87,16 +158,16 @@ pre-configure:
> -DCMAKE_COLOR_MAKEFILE=OFF \
> -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON \
> -DCMAKE_SUPPRESS_REGENERATION=ON \
> - -DCMAKE_INSTALL_PREFIX=${WRKBUILD}/deps \
> + -DCMAKE_INSTALL_PREFIX=${STATIC_DEPS_INST} \
> -DLUA_BUILD_TYPE=System \
> -DLUA_INCLUDE_DIR=${MODLUA_INCL_DIR} \
> - -DLUA_LIBRARIES=${MODLUA_LIB} \
> + -DLUA_LIBRARIES=${MODLUA_LIBDIR} \
> -DWITH_LUA_ENGINE=Lua \
> - ${WRKDIR}/${LUV}
> - cd ${WRKBUILD}/build && \
> + ${STATIC_DEPS_WRKSRC}/luv
> + cd ${STATIC_DEPS_WRKBUILD}/luv && \
> ${SETENV} ${MAKE_ENV} VERBOSE=1 \
> ${MAKE_PROGRAM}
> - cd ${WRKBUILD}/build && \
> + cd ${STATIC_DEPS_WRKBUILD}/luv && \
> ${SETENV} ${MAKE_ENV} VERBOSE=1 \
> ${MAKE_PROGRAM} install
>
> @@ -105,8 +176,14 @@ pre-configure:
> #
> # If cscope is installed, one test fails:
> # https://github.com/neovim/neovim/issues/12744
> -do-test:
> - cd ${WRKSRC}/src/nvim/testdir && ${SETENV} LC_CTYPE=en_US.UTF-8 \
> - ${MAKE_PROGRAM} NVIM_PRG=${WRKBUILD}/bin/nvim ${MAKE_FLAGS}
> +#
> +# XXX: This is broken. The tarball doesn't contain the necessary 'ci'
> +# directory. Will be fixed for the next release though:
> +# https://github.com/neovim/neovim/issues/15856
> +NO_TEST = Yes
> +#do-test:
> +# true
> +# cd ${WRKSRC}/src/nvim/testdir && ${SETENV} LC_CTYPE=en_US.UTF-8 \
> +# ${MAKE_PROGRAM} NVIM_PRG=${WRKBUILD}/bin/nvim ${MAKE_FLAGS}
>
> .include <bsd.port.mk>
> Index: distinfo
> ===================================================================
> RCS file: /cvs/ports/editors/neovim/distinfo,v
> retrieving revision 1.9
> diff -u -p -r1.9 distinfo
> --- distinfo 18 Jul 2021 09:18:07 -0000 1.9
> +++ distinfo 2 Oct 2021 10:10:22 -0000
> @@ -1,4 +1,6 @@
> +SHA256 (luajit-787736990ac3b7d5ceaba2697c7d0f58f77bb782.tar.gz) = Lj90vCefRsxGOr/Gezbmn6rwNmI3AEdx9MrEvyqfXvs=
> SHA256 (luv-1.30.1-1.tar.gz) = Tih77W9R/VDOA7p/qMwz2E4bnLhpEcSBK7H0eh4+0So=
> -SHA256 (neovim-0.5.0.tar.gz) = IpTKqdIBGZZJn71w5ABuTvVdt1uZtnGRVMCSYuI3ZO8=
> +SHA256 (neovim-0.5.1.tar.gz) = qkSXleXMab3S7u1wlfILnAhsbs/N4Ktiq5ep0EJD7IQ=
> +SIZE (luajit-787736990ac3b7d5ceaba2697c7d0f58f77bb782.tar.gz) = 1037727
> SIZE (luv-1.30.1-1.tar.gz) = 1354232
> -SIZE (neovim-0.5.0.tar.gz) = 10337976
> +SIZE (neovim-0.5.1.tar.gz) = 10349190
> Index: patches/patch-src_nvim_CMakeLists_txt
> ===================================================================
> RCS file: patches/patch-src_nvim_CMakeLists_txt
> diff -N patches/patch-src_nvim_CMakeLists_txt
> --- patches/patch-src_nvim_CMakeLists_txt 18 Aug 2020 19:15:54 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,19 +0,0 @@
> -$OpenBSD: patch-src_nvim_CMakeLists_txt,v 1.3 2020/08/18 19:15:54 edd Exp $
> -
> -No need for libc++abi, only available on clang archs and only needed for
> -luajit (we use lua instead).
> -
> -Index: src/nvim/CMakeLists.txt
> ---- src/nvim/CMakeLists.txt.orig
> -+++ src/nvim/CMakeLists.txt
> -@@ -366,10 +366,6 @@ endforeach()
> -
> - # Our dependencies come first.
> -
> --if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
> -- list(APPEND NVIM_LINK_LIBRARIES pthread c++abi)
> --endif()
> --
> - if (LibIntl_FOUND)
> - list(APPEND NVIM_LINK_LIBRARIES ${LibIntl_LIBRARY})
> - endif()
> Index: patches/patch-static-deps_luajit_src_host_buildvm_asm_c
> ===================================================================
> RCS file: patches/patch-static-deps_luajit_src_host_buildvm_asm_c
> diff -N patches/patch-static-deps_luajit_src_host_buildvm_asm_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-static-deps_luajit_src_host_buildvm_asm_c 2 Oct 2021 10:10:22 -0000
> @@ -0,0 +1,16 @@
> +$OpenBSD$
> +
> +.gnu_attribute requires binutils 2.18
> +
> +Index: static-deps/luajit/src/host/buildvm_asm.c
> +--- static-deps/luajit/src/host/buildvm_asm.c.orig
> ++++ static-deps/luajit/src/host/buildvm_asm.c
> +@@ -327,7 +327,7 @@ void emit_asm(BuildCtx *ctx)
> + #if !(LJ_TARGET_PS3 || LJ_TARGET_PSVITA)
> + fprintf(ctx->fp, "\t.section .note.GNU-stack,\"\"," ELFASM_PX "progbits\n");
> +

No comments:

Post a Comment