Message ID | 20220519163731.164817-2-dominick.grift@defensec.nl |
---|---|
State | New |
Headers | show |
Series | [1/4] pcre2: adds pcre2 to base | expand |
On Thu, May 19, 2022 at 06:37:28PM +0200, Dominick Grift wrote: > libselinux-3.4 requires pcre2 > > Signed-off-by: Dominick Grift <dominick.grift@defensec.nl> > --- > package/libs/pcre2/Config.in | 30 ++++++++++++ > package/libs/pcre2/Makefile | 92 ++++++++++++++++++++++++++++++++++++ > 2 files changed, 122 insertions(+) > create mode 100644 package/libs/pcre2/Config.in > create mode 100644 package/libs/pcre2/Makefile > > diff --git a/package/libs/pcre2/Config.in b/package/libs/pcre2/Config.in > new file mode 100644 > index 0000000000..8777a4e84c > --- /dev/null > +++ b/package/libs/pcre2/Config.in > @@ -0,0 +1,30 @@ > +config PCRE2_JIT_ENABLED > + bool > + depends on PACKAGE_libpcre2 && (aarch64 || aarch64_be || arm || i386 || i686 || x86_64 || mips || mipsel || mips64 || mips64el || powerpc || powerpc64 || powerpcle || sparc) > + default y if (arm || i686 || x86_64) Can you explain the choice of architectures for which you are suggesting to enable JIT by default? Wouldn't e.g. aarch64 benefit just as well? > + prompt "Enable JIT compiler support" > + help > + Enable JIT (Just-In-Time) compiler support. > + > + Just-in-time compiling is a heavyweight optimization that can greatly > + speed up pattern matching. However, it comes at the cost of extra > + processing before the match is performed, so it is of most benefit when > + the same pattern is going to be matched many times. This does not > + necessarily mean many calls of a matching function; if the pattern is > + not anchored, matching attempts may take place many times at various > + positions in the subject, even for a single call. Therefore, if the > + subject string is very long, it may still pay to use JIT even for > + one-off matches. JIT support is available for all of the 8-bit, 16-bit > + and 32-bit PCRE2 libraries and adds about 100KB to the resulting > + libpcre2.so. JIT support applies only to the traditional Perl-compatible > + matching function. It does not apply when the DFA matching function is > + being used. > + > + Enabling this option can give an about 10x performance increase on JIT > + operations. It can be desireable for e.g. high performance Apache > + mod_rewrite or HA-Proxy reqrep operations. > + > + However, JIT should _only_ be enabled on architectures that are supported. > + Enabling JIT on unsupported platforms will result in a compilation > + failure. A list of supported architectures can be found here: > + https://pcre.org/current/doc/html/pcre2jit.html#SEC2 > diff --git a/package/libs/pcre2/Makefile b/package/libs/pcre2/Makefile > new file mode 100644 > index 0000000000..4e75a1cda9 > --- /dev/null > +++ b/package/libs/pcre2/Makefile > @@ -0,0 +1,92 @@ > +# > +# Copyright (C) 2017 Shane Peelar > +# > +# This is free software, licensed under the GNU General Public License v2. > +# See /LICENSE for more information. > +# > + > +include $(TOPDIR)/rules.mk > + > +PKG_NAME:=pcre2 > +PKG_VERSION:=10.37 > +PKG_RELEASE:=$(AUTORELEASE) > + > +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 > +PKG_SOURCE_URL:=@SF/pcre/$(PKG_NAME)/$(PKG_VERSION) > +PKG_HASH:=4d95a96e8b80529893b4562be12648d798b957b1ba1aae39606bbc2ab956d270 > + > +PKG_MAINTAINER:=Shane Peelar <lookatyouhacker@gmail.com> > +PKG_LICENSE:=BSD-3-Clause > +PKG_LICENSE_FILES:=LICENCE > +PKG_CPE_ID:=cpe:/a:pcre:pcre > + > +PKG_CONFIG_DEPENDS:=\ > + CONFIG_PACKAGE_libpcre2-16 \ > + CONFIG_PACKAGE_libpcre2-32 \ > + CONFIG_PCRE2_JIT_ENABLED > + > +include $(INCLUDE_DIR)/package.mk > +include $(INCLUDE_DIR)/cmake.mk > + > +define Package/libpcre2/default > + SECTION:=libs > + CATEGORY:=Libraries > + URL:=https://www.pcre.org/ > +endef > + > +define Package/libpcre2/config > + source "$(SOURCE)/Config.in" > +endef > + > +define Package/libpcre2 > + $(call Package/libpcre2/default) > + TITLE:=A Perl Compatible Regular Expression library > +endef > + > +define Package/libpcre2-16 > + $(call Package/libpcre2/default) > + TITLE:=A Perl Compatible Regular Expression library (16bit support) > +endef > + > +define Package/libpcre2-32 > + $(call Package/libpcre2/default) > + TITLE:=A Perl Compatible Regular Expression library (32bit support) > +endef > + > +CMAKE_OPTIONS += \ > + -DBUILD_SHARED_LIBS=ON \ > + -DPCRE2_BUILD_PCRE2_8=ON \ > + -DPCRE2_BUILD_PCRE2_16=O$(if $(CONFIG_PACKAGE_libpcre2-16),N,FF) \ > + -DPCRE2_BUILD_PCRE2_32=O$(if $(CONFIG_PACKAGE_libpcre2-32),N,FF) \ > + -DPCRE2_DEBUG=OFF \ > + -DPCRE2_DISABLE_PERCENT_ZT=ON \ > + -DPCRE2_SUPPORT_JIT=O$(if $(CONFIG_PCRE2_JIT_ENABLED),N,FF) \ > + -DPCRE2_SHOW_REPORT=OFF \ > + -DPCRE2_BUILD_PCRE2GREP=OFF \ > + -DPCRE2_BUILD_TESTS=OFF > + > +define Build/InstallDev > + $(call Build/InstallDev/cmake,$(1)) > + $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(1)/usr/bin/pcre2-config > + $(INSTALL_DIR) $(2)/bin > + $(LN) ../../usr/bin/pcre2-config $(2)/bin/pcre2-config > +endef > + > +define Package/libpcre2/install > + $(INSTALL_DIR) $(1)/usr/lib > + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-{8,posix}.so* $(1)/usr/lib/ > +endef > + > +define Package/libpcre2-16/install > + $(INSTALL_DIR) $(1)/usr/lib > + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-16.so* $(1)/usr/lib/ > +endef > + > +define Package/libpcre2-32/install > + $(INSTALL_DIR) $(1)/usr/lib > + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-32.so* $(1)/usr/lib/ > +endef > + > +$(eval $(call BuildPackage,libpcre2)) > +$(eval $(call BuildPackage,libpcre2-16)) > +$(eval $(call BuildPackage,libpcre2-32)) > -- > 2.36.1 >
Daniel Golle <daniel@makrotopia.org> writes: > On Thu, May 19, 2022 at 06:37:28PM +0200, Dominick Grift wrote: >> libselinux-3.4 requires pcre2 >> >> Signed-off-by: Dominick Grift <dominick.grift@defensec.nl> >> --- >> package/libs/pcre2/Config.in | 30 ++++++++++++ >> package/libs/pcre2/Makefile | 92 ++++++++++++++++++++++++++++++++++++ >> 2 files changed, 122 insertions(+) >> create mode 100644 package/libs/pcre2/Config.in >> create mode 100644 package/libs/pcre2/Makefile >> >> diff --git a/package/libs/pcre2/Config.in b/package/libs/pcre2/Config.in >> new file mode 100644 >> index 0000000000..8777a4e84c >> --- /dev/null >> +++ b/package/libs/pcre2/Config.in >> @@ -0,0 +1,30 @@ >> +config PCRE2_JIT_ENABLED >> + bool >> + depends on PACKAGE_libpcre2 && (aarch64 || aarch64_be || arm || >> i386 || i686 || x86_64 || mips || mipsel || mips64 || mips64el || >> powerpc || powerpc64 || powerpcle || sparc) >> + default y if (arm || i686 || x86_64) > > Can you explain the choice of architectures for which you are > suggesting to enable JIT by default? > Wouldn't e.g. aarch64 benefit just as well? I did not choose anything. This commit is a 1-to-1 copy from pcre2 in the packages feed. > >> + prompt "Enable JIT compiler support" >> + help >> + Enable JIT (Just-In-Time) compiler support. >> + >> + Just-in-time compiling is a heavyweight optimization that can greatly >> + speed up pattern matching. However, it comes at the cost of extra >> + processing before the match is performed, so it is of most benefit when >> + the same pattern is going to be matched many times. This does not >> + necessarily mean many calls of a matching function; if the pattern is >> + not anchored, matching attempts may take place many times at various >> + positions in the subject, even for a single call. Therefore, if the >> + subject string is very long, it may still pay to use JIT even for >> + one-off matches. JIT support is available for all of the 8-bit, 16-bit >> + and 32-bit PCRE2 libraries and adds about 100KB to the resulting >> + libpcre2.so. JIT support applies only to the traditional Perl-compatible >> + matching function. It does not apply when the DFA matching function is >> + being used. >> + >> + Enabling this option can give an about 10x performance increase on JIT >> + operations. It can be desireable for e.g. high performance Apache >> + mod_rewrite or HA-Proxy reqrep operations. >> + >> + However, JIT should _only_ be enabled on architectures that are supported. >> + Enabling JIT on unsupported platforms will result in a compilation >> + failure. A list of supported architectures can be found here: >> + https://pcre.org/current/doc/html/pcre2jit.html#SEC2 >> diff --git a/package/libs/pcre2/Makefile b/package/libs/pcre2/Makefile >> new file mode 100644 >> index 0000000000..4e75a1cda9 >> --- /dev/null >> +++ b/package/libs/pcre2/Makefile >> @@ -0,0 +1,92 @@ >> +# >> +# Copyright (C) 2017 Shane Peelar >> +# >> +# This is free software, licensed under the GNU General Public License v2. >> +# See /LICENSE for more information. >> +# >> + >> +include $(TOPDIR)/rules.mk >> + >> +PKG_NAME:=pcre2 >> +PKG_VERSION:=10.37 >> +PKG_RELEASE:=$(AUTORELEASE) >> + >> +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 >> +PKG_SOURCE_URL:=@SF/pcre/$(PKG_NAME)/$(PKG_VERSION) >> +PKG_HASH:=4d95a96e8b80529893b4562be12648d798b957b1ba1aae39606bbc2ab956d270 >> + >> +PKG_MAINTAINER:=Shane Peelar <lookatyouhacker@gmail.com> >> +PKG_LICENSE:=BSD-3-Clause >> +PKG_LICENSE_FILES:=LICENCE >> +PKG_CPE_ID:=cpe:/a:pcre:pcre >> + >> +PKG_CONFIG_DEPENDS:=\ >> + CONFIG_PACKAGE_libpcre2-16 \ >> + CONFIG_PACKAGE_libpcre2-32 \ >> + CONFIG_PCRE2_JIT_ENABLED >> + >> +include $(INCLUDE_DIR)/package.mk >> +include $(INCLUDE_DIR)/cmake.mk >> + >> +define Package/libpcre2/default >> + SECTION:=libs >> + CATEGORY:=Libraries >> + URL:=https://www.pcre.org/ >> +endef >> + >> +define Package/libpcre2/config >> + source "$(SOURCE)/Config.in" >> +endef >> + >> +define Package/libpcre2 >> + $(call Package/libpcre2/default) >> + TITLE:=A Perl Compatible Regular Expression library >> +endef >> + >> +define Package/libpcre2-16 >> + $(call Package/libpcre2/default) >> + TITLE:=A Perl Compatible Regular Expression library (16bit support) >> +endef >> + >> +define Package/libpcre2-32 >> + $(call Package/libpcre2/default) >> + TITLE:=A Perl Compatible Regular Expression library (32bit support) >> +endef >> + >> +CMAKE_OPTIONS += \ >> + -DBUILD_SHARED_LIBS=ON \ >> + -DPCRE2_BUILD_PCRE2_8=ON \ >> + -DPCRE2_BUILD_PCRE2_16=O$(if $(CONFIG_PACKAGE_libpcre2-16),N,FF) \ >> + -DPCRE2_BUILD_PCRE2_32=O$(if $(CONFIG_PACKAGE_libpcre2-32),N,FF) \ >> + -DPCRE2_DEBUG=OFF \ >> + -DPCRE2_DISABLE_PERCENT_ZT=ON \ >> + -DPCRE2_SUPPORT_JIT=O$(if $(CONFIG_PCRE2_JIT_ENABLED),N,FF) \ >> + -DPCRE2_SHOW_REPORT=OFF \ >> + -DPCRE2_BUILD_PCRE2GREP=OFF \ >> + -DPCRE2_BUILD_TESTS=OFF >> + >> +define Build/InstallDev >> + $(call Build/InstallDev/cmake,$(1)) >> + $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(1)/usr/bin/pcre2-config >> + $(INSTALL_DIR) $(2)/bin >> + $(LN) ../../usr/bin/pcre2-config $(2)/bin/pcre2-config >> +endef >> + >> +define Package/libpcre2/install >> + $(INSTALL_DIR) $(1)/usr/lib >> + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-{8,posix}.so* $(1)/usr/lib/ >> +endef >> + >> +define Package/libpcre2-16/install >> + $(INSTALL_DIR) $(1)/usr/lib >> + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-16.so* $(1)/usr/lib/ >> +endef >> + >> +define Package/libpcre2-32/install >> + $(INSTALL_DIR) $(1)/usr/lib >> + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-32.so* $(1)/usr/lib/ >> +endef >> + >> +$(eval $(call BuildPackage,libpcre2)) >> +$(eval $(call BuildPackage,libpcre2-16)) >> +$(eval $(call BuildPackage,libpcre2-32)) >> -- >> 2.36.1 >>
Dominick Grift <dominick.grift@defensec.nl> writes: > Daniel Golle <daniel@makrotopia.org> writes: > >> On Thu, May 19, 2022 at 06:37:28PM +0200, Dominick Grift wrote: >>> libselinux-3.4 requires pcre2 >>> >>> Signed-off-by: Dominick Grift <dominick.grift@defensec.nl> >>> --- >>> package/libs/pcre2/Config.in | 30 ++++++++++++ >>> package/libs/pcre2/Makefile | 92 ++++++++++++++++++++++++++++++++++++ >>> 2 files changed, 122 insertions(+) >>> create mode 100644 package/libs/pcre2/Config.in >>> create mode 100644 package/libs/pcre2/Makefile >>> >>> diff --git a/package/libs/pcre2/Config.in b/package/libs/pcre2/Config.in >>> new file mode 100644 >>> index 0000000000..8777a4e84c >>> --- /dev/null >>> +++ b/package/libs/pcre2/Config.in >>> @@ -0,0 +1,30 @@ >>> +config PCRE2_JIT_ENABLED >>> + bool >>> + depends on PACKAGE_libpcre2 && (aarch64 || aarch64_be || arm || >>> i386 || i686 || x86_64 || mips || mipsel || mips64 || mips64el || >>> powerpc || powerpc64 || powerpcle || sparc) >>> + default y if (arm || i686 || x86_64) >> >> Can you explain the choice of architectures for which you are >> suggesting to enable JIT by default? >> Wouldn't e.g. aarch64 benefit just as well? > > I did not choose anything. This commit is a 1-to-1 copy from pcre2 in > the packages feed. By the way, legacy pcre also only enables JIT for arm, i686 and x86_64 by default. A list of supported architectures can be found here: https://pcre.org/current/doc/html/pcre2jit.html#SEC2 But. Yes. I did not change anything in that regard. Last thing I want to do is add distraction. I only did what I had to do to get the job done. If you want to change the JIT defaults then probably best to address that in a separate patch. > >> >>> + prompt "Enable JIT compiler support" >>> + help >>> + Enable JIT (Just-In-Time) compiler support. >>> + >>> + Just-in-time compiling is a heavyweight optimization that can greatly >>> + speed up pattern matching. However, it comes at the cost of extra >>> + processing before the match is performed, so it is of most benefit when >>> + the same pattern is going to be matched many times. This does not >>> + necessarily mean many calls of a matching function; if the pattern is >>> + not anchored, matching attempts may take place many times at various >>> + positions in the subject, even for a single call. Therefore, if the >>> + subject string is very long, it may still pay to use JIT even for >>> + one-off matches. JIT support is available for all of the 8-bit, 16-bit >>> + and 32-bit PCRE2 libraries and adds about 100KB to the resulting >>> + libpcre2.so. JIT support applies only to the traditional Perl-compatible >>> + matching function. It does not apply when the DFA matching function is >>> + being used. >>> + >>> + Enabling this option can give an about 10x performance increase on JIT >>> + operations. It can be desireable for e.g. high performance Apache >>> + mod_rewrite or HA-Proxy reqrep operations. >>> + >>> + However, JIT should _only_ be enabled on architectures that are supported. >>> + Enabling JIT on unsupported platforms will result in a compilation >>> + failure. A list of supported architectures can be found here: >>> + https://pcre.org/current/doc/html/pcre2jit.html#SEC2 >>> diff --git a/package/libs/pcre2/Makefile b/package/libs/pcre2/Makefile >>> new file mode 100644 >>> index 0000000000..4e75a1cda9 >>> --- /dev/null >>> +++ b/package/libs/pcre2/Makefile >>> @@ -0,0 +1,92 @@ >>> +# >>> +# Copyright (C) 2017 Shane Peelar >>> +# >>> +# This is free software, licensed under the GNU General Public License v2. >>> +# See /LICENSE for more information. >>> +# >>> + >>> +include $(TOPDIR)/rules.mk >>> + >>> +PKG_NAME:=pcre2 >>> +PKG_VERSION:=10.37 >>> +PKG_RELEASE:=$(AUTORELEASE) >>> + >>> +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 >>> +PKG_SOURCE_URL:=@SF/pcre/$(PKG_NAME)/$(PKG_VERSION) >>> +PKG_HASH:=4d95a96e8b80529893b4562be12648d798b957b1ba1aae39606bbc2ab956d270 >>> + >>> +PKG_MAINTAINER:=Shane Peelar <lookatyouhacker@gmail.com> >>> +PKG_LICENSE:=BSD-3-Clause >>> +PKG_LICENSE_FILES:=LICENCE >>> +PKG_CPE_ID:=cpe:/a:pcre:pcre >>> + >>> +PKG_CONFIG_DEPENDS:=\ >>> + CONFIG_PACKAGE_libpcre2-16 \ >>> + CONFIG_PACKAGE_libpcre2-32 \ >>> + CONFIG_PCRE2_JIT_ENABLED >>> + >>> +include $(INCLUDE_DIR)/package.mk >>> +include $(INCLUDE_DIR)/cmake.mk >>> + >>> +define Package/libpcre2/default >>> + SECTION:=libs >>> + CATEGORY:=Libraries >>> + URL:=https://www.pcre.org/ >>> +endef >>> + >>> +define Package/libpcre2/config >>> + source "$(SOURCE)/Config.in" >>> +endef >>> + >>> +define Package/libpcre2 >>> + $(call Package/libpcre2/default) >>> + TITLE:=A Perl Compatible Regular Expression library >>> +endef >>> + >>> +define Package/libpcre2-16 >>> + $(call Package/libpcre2/default) >>> + TITLE:=A Perl Compatible Regular Expression library (16bit support) >>> +endef >>> + >>> +define Package/libpcre2-32 >>> + $(call Package/libpcre2/default) >>> + TITLE:=A Perl Compatible Regular Expression library (32bit support) >>> +endef >>> + >>> +CMAKE_OPTIONS += \ >>> + -DBUILD_SHARED_LIBS=ON \ >>> + -DPCRE2_BUILD_PCRE2_8=ON \ >>> + -DPCRE2_BUILD_PCRE2_16=O$(if $(CONFIG_PACKAGE_libpcre2-16),N,FF) \ >>> + -DPCRE2_BUILD_PCRE2_32=O$(if $(CONFIG_PACKAGE_libpcre2-32),N,FF) \ >>> + -DPCRE2_DEBUG=OFF \ >>> + -DPCRE2_DISABLE_PERCENT_ZT=ON \ >>> + -DPCRE2_SUPPORT_JIT=O$(if $(CONFIG_PCRE2_JIT_ENABLED),N,FF) \ >>> + -DPCRE2_SHOW_REPORT=OFF \ >>> + -DPCRE2_BUILD_PCRE2GREP=OFF \ >>> + -DPCRE2_BUILD_TESTS=OFF >>> + >>> +define Build/InstallDev >>> + $(call Build/InstallDev/cmake,$(1)) >>> + $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(1)/usr/bin/pcre2-config >>> + $(INSTALL_DIR) $(2)/bin >>> + $(LN) ../../usr/bin/pcre2-config $(2)/bin/pcre2-config >>> +endef >>> + >>> +define Package/libpcre2/install >>> + $(INSTALL_DIR) $(1)/usr/lib >>> + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-{8,posix}.so* $(1)/usr/lib/ >>> +endef >>> + >>> +define Package/libpcre2-16/install >>> + $(INSTALL_DIR) $(1)/usr/lib >>> + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-16.so* $(1)/usr/lib/ >>> +endef >>> + >>> +define Package/libpcre2-32/install >>> + $(INSTALL_DIR) $(1)/usr/lib >>> + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-32.so* $(1)/usr/lib/ >>> +endef >>> + >>> +$(eval $(call BuildPackage,libpcre2)) >>> +$(eval $(call BuildPackage,libpcre2-16)) >>> +$(eval $(call BuildPackage,libpcre2-32)) >>> -- >>> 2.36.1 >>>
On Thu, 19 May 2022 at 18:35, Daniel Golle <daniel@makrotopia.org> wrote: > > On Thu, May 19, 2022 at 06:37:28PM +0200, Dominick Grift wrote: > > libselinux-3.4 requires pcre2 > > > > Signed-off-by: Dominick Grift <dominick.grift@defensec.nl> > > --- > > package/libs/pcre2/Config.in | 30 ++++++++++++ > > package/libs/pcre2/Makefile | 92 ++++++++++++++++++++++++++++++++++++ > > 2 files changed, 122 insertions(+) > > create mode 100644 package/libs/pcre2/Config.in > > create mode 100644 package/libs/pcre2/Makefile > > > > diff --git a/package/libs/pcre2/Config.in b/package/libs/pcre2/Config.in > > new file mode 100644 > > index 0000000000..8777a4e84c > > --- /dev/null > > +++ b/package/libs/pcre2/Config.in > > @@ -0,0 +1,30 @@ > > +config PCRE2_JIT_ENABLED > > + bool > > + depends on PACKAGE_libpcre2 && (aarch64 || aarch64_be || arm || i386 || i686 || x86_64 || mips || mipsel || mips64 || mips64el || powerpc || powerpc64 || powerpcle || sparc) > > + default y if (arm || i686 || x86_64) > > Can you explain the choice of architectures for which you are > suggesting to enable JIT by default? > Wouldn't e.g. aarch64 benefit just as well? I'd go even further and set it as default y if !arc (which is already "special" enough). I think all of our other targets are supported by the JIT. But that would be for a follow-up patch, of course. Cheers, Rui
Rui Salvaterra <rsalvaterra@gmail.com> writes: > On Thu, 19 May 2022 at 18:35, Daniel Golle <daniel@makrotopia.org> wrote: >> >> On Thu, May 19, 2022 at 06:37:28PM +0200, Dominick Grift wrote: >> > libselinux-3.4 requires pcre2 >> > >> > Signed-off-by: Dominick Grift <dominick.grift@defensec.nl> >> > --- >> > package/libs/pcre2/Config.in | 30 ++++++++++++ >> > package/libs/pcre2/Makefile | 92 ++++++++++++++++++++++++++++++++++++ >> > 2 files changed, 122 insertions(+) >> > create mode 100644 package/libs/pcre2/Config.in >> > create mode 100644 package/libs/pcre2/Makefile >> > >> > diff --git a/package/libs/pcre2/Config.in b/package/libs/pcre2/Config.in >> > new file mode 100644 >> > index 0000000000..8777a4e84c >> > --- /dev/null >> > +++ b/package/libs/pcre2/Config.in >> > @@ -0,0 +1,30 @@ >> > +config PCRE2_JIT_ENABLED >> > + bool >> > + depends on PACKAGE_libpcre2 && (aarch64 || aarch64_be || arm || >> > i386 || i686 || x86_64 || mips || mipsel || mips64 || mips64el || >> > powerpc || powerpc64 || powerpcle || sparc) >> > + default y if (arm || i686 || x86_64) >> >> Can you explain the choice of architectures for which you are >> suggesting to enable JIT by default? >> Wouldn't e.g. aarch64 benefit just as well? > > I'd go even further and set it as default y if !arc (which is already > "special" enough). I think all of our other targets are supported by > the JIT. But that would be for a follow-up patch, of course. I am not a huge fan of JIT in general as I associate it with execution of anonymous memory and buffer overflows, whether that is justified or not. Besides this is a "heavyweight" optimization that is not alway's benificial. It adds 100KiB in size. I doubt that enabling this feature brings much to the table in OpenWrt (except 100KiB). I would actually consider taking the opposite route and disable JIT by default for all architectures. > > Cheers, > Rui > > _______________________________________________ > openwrt-devel mailing list > openwrt-devel@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
diff --git a/package/libs/pcre2/Config.in b/package/libs/pcre2/Config.in new file mode 100644 index 0000000000..8777a4e84c --- /dev/null +++ b/package/libs/pcre2/Config.in @@ -0,0 +1,30 @@ +config PCRE2_JIT_ENABLED + bool + depends on PACKAGE_libpcre2 && (aarch64 || aarch64_be || arm || i386 || i686 || x86_64 || mips || mipsel || mips64 || mips64el || powerpc || powerpc64 || powerpcle || sparc) + default y if (arm || i686 || x86_64) + prompt "Enable JIT compiler support" + help + Enable JIT (Just-In-Time) compiler support. + + Just-in-time compiling is a heavyweight optimization that can greatly + speed up pattern matching. However, it comes at the cost of extra + processing before the match is performed, so it is of most benefit when + the same pattern is going to be matched many times. This does not + necessarily mean many calls of a matching function; if the pattern is + not anchored, matching attempts may take place many times at various + positions in the subject, even for a single call. Therefore, if the + subject string is very long, it may still pay to use JIT even for + one-off matches. JIT support is available for all of the 8-bit, 16-bit + and 32-bit PCRE2 libraries and adds about 100KB to the resulting + libpcre2.so. JIT support applies only to the traditional Perl-compatible + matching function. It does not apply when the DFA matching function is + being used. + + Enabling this option can give an about 10x performance increase on JIT + operations. It can be desireable for e.g. high performance Apache + mod_rewrite or HA-Proxy reqrep operations. + + However, JIT should _only_ be enabled on architectures that are supported. + Enabling JIT on unsupported platforms will result in a compilation + failure. A list of supported architectures can be found here: + https://pcre.org/current/doc/html/pcre2jit.html#SEC2 diff --git a/package/libs/pcre2/Makefile b/package/libs/pcre2/Makefile new file mode 100644 index 0000000000..4e75a1cda9 --- /dev/null +++ b/package/libs/pcre2/Makefile @@ -0,0 +1,92 @@ +# +# Copyright (C) 2017 Shane Peelar +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=pcre2 +PKG_VERSION:=10.37 +PKG_RELEASE:=$(AUTORELEASE) + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_SOURCE_URL:=@SF/pcre/$(PKG_NAME)/$(PKG_VERSION) +PKG_HASH:=4d95a96e8b80529893b4562be12648d798b957b1ba1aae39606bbc2ab956d270 + +PKG_MAINTAINER:=Shane Peelar <lookatyouhacker@gmail.com> +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENCE +PKG_CPE_ID:=cpe:/a:pcre:pcre + +PKG_CONFIG_DEPENDS:=\ + CONFIG_PACKAGE_libpcre2-16 \ + CONFIG_PACKAGE_libpcre2-32 \ + CONFIG_PCRE2_JIT_ENABLED + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk + +define Package/libpcre2/default + SECTION:=libs + CATEGORY:=Libraries + URL:=https://www.pcre.org/ +endef + +define Package/libpcre2/config + source "$(SOURCE)/Config.in" +endef + +define Package/libpcre2 + $(call Package/libpcre2/default) + TITLE:=A Perl Compatible Regular Expression library +endef + +define Package/libpcre2-16 + $(call Package/libpcre2/default) + TITLE:=A Perl Compatible Regular Expression library (16bit support) +endef + +define Package/libpcre2-32 + $(call Package/libpcre2/default) + TITLE:=A Perl Compatible Regular Expression library (32bit support) +endef + +CMAKE_OPTIONS += \ + -DBUILD_SHARED_LIBS=ON \ + -DPCRE2_BUILD_PCRE2_8=ON \ + -DPCRE2_BUILD_PCRE2_16=O$(if $(CONFIG_PACKAGE_libpcre2-16),N,FF) \ + -DPCRE2_BUILD_PCRE2_32=O$(if $(CONFIG_PACKAGE_libpcre2-32),N,FF) \ + -DPCRE2_DEBUG=OFF \ + -DPCRE2_DISABLE_PERCENT_ZT=ON \ + -DPCRE2_SUPPORT_JIT=O$(if $(CONFIG_PCRE2_JIT_ENABLED),N,FF) \ + -DPCRE2_SHOW_REPORT=OFF \ + -DPCRE2_BUILD_PCRE2GREP=OFF \ + -DPCRE2_BUILD_TESTS=OFF + +define Build/InstallDev + $(call Build/InstallDev/cmake,$(1)) + $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(1)/usr/bin/pcre2-config + $(INSTALL_DIR) $(2)/bin + $(LN) ../../usr/bin/pcre2-config $(2)/bin/pcre2-config +endef + +define Package/libpcre2/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-{8,posix}.so* $(1)/usr/lib/ +endef + +define Package/libpcre2-16/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-16.so* $(1)/usr/lib/ +endef + +define Package/libpcre2-32/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-32.so* $(1)/usr/lib/ +endef + +$(eval $(call BuildPackage,libpcre2)) +$(eval $(call BuildPackage,libpcre2-16)) +$(eval $(call BuildPackage,libpcre2-32))
libselinux-3.4 requires pcre2 Signed-off-by: Dominick Grift <dominick.grift@defensec.nl> --- package/libs/pcre2/Config.in | 30 ++++++++++++ package/libs/pcre2/Makefile | 92 ++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 package/libs/pcre2/Config.in create mode 100644 package/libs/pcre2/Makefile