All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/2] package/pcre2: add JIT support option
@ 2019-02-15 23:20 Artem Panfilov
  2019-02-15 23:20 ` [Buildroot] [PATCH 2/2] package/php: fix how external PCRE2 JIT is enabled Artem Panfilov
  2019-04-13 19:54 ` [Buildroot] [PATCH 1/2] package/pcre2: add JIT support option Thomas Petazzoni
  0 siblings, 2 replies; 4+ messages in thread
From: Artem Panfilov @ 2019-02-15 23:20 UTC (permalink / raw)
  To: buildroot

Add JIT support option.

Signed-off-by: Artem Panfilov <panfilov.artyom@gmail.com>
---
 package/pcre2/Config.in | 8 ++++++++
 package/pcre2/pcre2.mk  | 6 ++++++
 2 files changed, 14 insertions(+)

diff --git a/package/pcre2/Config.in b/package/pcre2/Config.in
index bb576c75a1..007dd960c6 100644
--- a/package/pcre2/Config.in
+++ b/package/pcre2/Config.in
@@ -23,4 +23,12 @@ config BR2_PACKAGE_PCRE2_32
 	  This option builds the 32-bits pcre2 library, i.e
 	  'libpcre2-32'
 
+config BR2_PACKAGE_PCRE2_JIT
+	bool "enable JIT support"
+	depends on BR2_i386 || BR2_x86_64 || BR2_arm  || BR2_armeb || \
+		BR2_aarch64 || BR2_mips || BR2_mipsel || \
+		BR2_mips64 || BR2_mips64el || BR2_powerpc || BR2_sparc
+	help
+	  This option enables JIT support
+
 endif
diff --git a/package/pcre2/pcre2.mk b/package/pcre2/pcre2.mk
index ee3cacb9aa..6d103c2b9b 100644
--- a/package/pcre2/pcre2.mk
+++ b/package/pcre2/pcre2.mk
@@ -16,6 +16,12 @@ PCRE2_CONF_OPTS += --enable-pcre2-8
 PCRE2_CONF_OPTS += $(if $(BR2_PACKAGE_PCRE2_16),--enable-pcre2-16,--disable-pcre2-16)
 PCRE2_CONF_OPTS += $(if $(BR2_PACKAGE_PCRE2_32),--enable-pcre2-32,--disable-pcre2-32)
 
+ifeq ($(BR2_PACKAGE_PCRE2_JIT),y)
+PCRE2_CONF_OPTS += --enable-jit
+else
+PCRE2_CONF_OPTS += --disable-jit
+endif
+
 # disable fork usage if not available
 ifeq ($(BR2_USE_MMU),)
 PCRE2_CONF_OPTS += --disable-pcre2grep-callout
-- 
2.19.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH 2/2] package/php: fix how external PCRE2 JIT is enabled
  2019-02-15 23:20 [Buildroot] [PATCH 1/2] package/pcre2: add JIT support option Artem Panfilov
@ 2019-02-15 23:20 ` Artem Panfilov
  2019-04-13 19:58   ` Thomas Petazzoni
  2019-04-13 19:54 ` [Buildroot] [PATCH 1/2] package/pcre2: add JIT support option Thomas Petazzoni
  1 sibling, 1 reply; 4+ messages in thread
From: Artem Panfilov @ 2019-02-15 23:20 UTC (permalink / raw)
  To: buildroot

When the external PCRE2 library is used, PHP JIT option is enabled
based on architecture. If the external library was compiled without
JIT support runtime will fail.

When I call "php -m" command, I have the following error message:
PHP Fatal error:  Unable to start pcre module in Unknown on line 0

Signed-off-by: Artem Panfilov <panfilov.artyom@gmail.com>
---
 ...0006-pcre2-tweak-pcre2-jit-detection.patch | 41 +++++++++++++++++++
 package/php/php.mk                            |  7 ++++
 2 files changed, 48 insertions(+)
 create mode 100644 package/php/0006-pcre2-tweak-pcre2-jit-detection.patch

diff --git a/package/php/0006-pcre2-tweak-pcre2-jit-detection.patch b/package/php/0006-pcre2-tweak-pcre2-jit-detection.patch
new file mode 100644
index 0000000000..492abf008b
--- /dev/null
+++ b/package/php/0006-pcre2-tweak-pcre2-jit-detection.patch
@@ -0,0 +1,41 @@
+diff --git a/ext/pcre/config0.m4 b/ext/pcre/config0.m4
+index b9542f0113..f4c66a8369 100644
+--- a/ext/pcre/config0.m4
++++ b/ext/pcre/config0.m4
+@@ -53,35 +53,7 @@ PHP_ARG_WITH(pcre-jit,,[  --with-pcre-jit         Enable PCRE JIT functionality
+     AC_DEFINE(HAVE_PCRE, 1, [ ])
+ 
+     if test "$PHP_PCRE_JIT" != "no"; then
+-      AC_MSG_CHECKING([for JIT support in PCRE2])
+-      AC_RUN_IFELSE([
+-        AC_LANG_SOURCE([[
+-            #include <pcre2.h>
+-            #include <stdlib.h>
+-            int main(void) {
+-              uint32_t have_jit;
+-              pcre2_config_8(PCRE2_CONFIG_JIT, &have_jit);
+-              return !have_jit;
+-            }
+-        ]])], [
+-        AC_MSG_RESULT([yes])
+-        AC_DEFINE(HAVE_PCRE_JIT_SUPPORT, 1, [])
+-      ],
+-      [
+-        AC_MSG_RESULT([no])
+-      ],
+-      [
+-        AC_CANONICAL_HOST
+-        case $host_cpu in
+-        arm*|i[34567]86|x86_64|mips*|powerpc*|sparc)
+-          AC_MSG_RESULT([yes])
+-          AC_DEFINE(HAVE_PCRE_JIT_SUPPORT, 1, [])
+-          ;;
+-        *)
+-          AC_MSG_RESULT([no])
+-          ;;
+-        esac
+-      ])
++      AC_DEFINE(HAVE_PCRE_JIT_SUPPORT, 1, [])
+     fi
+ 
+     PHP_NEW_EXTENSION(pcre, php_pcre.c, no,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
diff --git a/package/php/php.mk b/package/php/php.mk
index 061b2f2609..eb6907972b 100644
--- a/package/php/php.mk
+++ b/package/php/php.mk
@@ -246,6 +246,13 @@ PHP_POST_CONFIGURE_HOOKS += PHP_DISABLE_VALGRIND
 ifeq ($(BR2_PACKAGE_PCRE2),y)
 PHP_CONF_OPTS += --with-pcre-regex=$(STAGING_DIR)/usr
 PHP_DEPENDENCIES += pcre2
+
+ifeq ($(BR2_PACKAGE_PCRE2_JIT),y)
+PHP_CONF_OPTS += --with-pcre-jit
+else
+PHP_CONF_OPTS += --without-pcre-jit
+endif
+
 else
 # The bundled pcre library is not configurable through ./configure options,
 # and by default is configured to be thread-safe, so it wants pthreads. So
-- 
2.19.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH 1/2] package/pcre2: add JIT support option
  2019-02-15 23:20 [Buildroot] [PATCH 1/2] package/pcre2: add JIT support option Artem Panfilov
  2019-02-15 23:20 ` [Buildroot] [PATCH 2/2] package/php: fix how external PCRE2 JIT is enabled Artem Panfilov
@ 2019-04-13 19:54 ` Thomas Petazzoni
  1 sibling, 0 replies; 4+ messages in thread
From: Thomas Petazzoni @ 2019-04-13 19:54 UTC (permalink / raw)
  To: buildroot

On Sat, 16 Feb 2019 02:20:58 +0300
Artem Panfilov <panfilov.artyom@gmail.com> wrote:

> Add JIT support option.
> 
> Signed-off-by: Artem Panfilov <panfilov.artyom@gmail.com>
> ---
>  package/pcre2/Config.in | 8 ++++++++
>  package/pcre2/pcre2.mk  | 6 ++++++
>  2 files changed, 14 insertions(+)

Applied to master, thanks.

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH 2/2] package/php: fix how external PCRE2 JIT is enabled
  2019-02-15 23:20 ` [Buildroot] [PATCH 2/2] package/php: fix how external PCRE2 JIT is enabled Artem Panfilov
@ 2019-04-13 19:58   ` Thomas Petazzoni
  0 siblings, 0 replies; 4+ messages in thread
From: Thomas Petazzoni @ 2019-04-13 19:58 UTC (permalink / raw)
  To: buildroot

Hello Artem,

On Sat, 16 Feb 2019 02:20:59 +0300
Artem Panfilov <panfilov.artyom@gmail.com> wrote:

> When the external PCRE2 library is used, PHP JIT option is enabled
> based on architecture. If the external library was compiled without
> JIT support runtime will fail.
> 
> When I call "php -m" command, I have the following error message:
> PHP Fatal error:  Unable to start pcre module in Unknown on line 0
> 
> Signed-off-by: Artem Panfilov <panfilov.artyom@gmail.com>

Thanks for this patch. See some comments below.

> diff --git a/package/php/0006-pcre2-tweak-pcre2-jit-detection.patch b/package/php/0006-pcre2-tweak-pcre2-jit-detection.patch
> new file mode 100644
> index 0000000000..492abf008b
> --- /dev/null
> +++ b/package/php/0006-pcre2-tweak-pcre2-jit-detection.patch
> @@ -0,0 +1,41 @@
> +diff --git a/ext/pcre/config0.m4 b/ext/pcre/config0.m4

We need all patches to have a Signed-off-by and a description. Also,
since PHP is maintained under Git upstream I believe, the patch should
be generated by Git format-patch.

> +index b9542f0113..f4c66a8369 100644
> +--- a/ext/pcre/config0.m4
> ++++ b/ext/pcre/config0.m4
> +@@ -53,35 +53,7 @@ PHP_ARG_WITH(pcre-jit,,[  --with-pcre-jit
> Enable PCRE JIT functionality
> +     AC_DEFINE(HAVE_PCRE, 1, [ ])
> + 
> +     if test "$PHP_PCRE_JIT" != "no"; then
> +-      AC_MSG_CHECKING([for JIT support in PCRE2])
> +-      AC_RUN_IFELSE([
> +-        AC_LANG_SOURCE([[
> +-            #include <pcre2.h>
> +-            #include <stdlib.h>
> +-            int main(void) {
> +-              uint32_t have_jit;
> +-              pcre2_config_8(PCRE2_CONFIG_JIT, &have_jit);
> +-              return !have_jit;
> +-            }
> +-        ]])], [
> +-        AC_MSG_RESULT([yes])
> +-        AC_DEFINE(HAVE_PCRE_JIT_SUPPORT, 1, [])
> +-      ],
> +-      [
> +-        AC_MSG_RESULT([no])
> +-      ],
> +-      [
> +-        AC_CANONICAL_HOST
> +-        case $host_cpu in
> +-        arm*|i[34567]86|x86_64|mips*|powerpc*|sparc)
> +-          AC_MSG_RESULT([yes])
> +-          AC_DEFINE(HAVE_PCRE_JIT_SUPPORT, 1, [])
> +-          ;;
> +-        *)
> +-          AC_MSG_RESULT([no])
> +-          ;;
> +-        esac
> +-      ])
> ++      AC_DEFINE(HAVE_PCRE_JIT_SUPPORT, 1, [])

This change is not really great, as it cannot be contributed upstream.
Better approaches would be

 * Add an autoconf cache variable
   (https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Caching-Results.html)
   that allows to preseed the fact that the pcre2 library is built with
   JIT support, and therefore avoid the AC_TRY_RUN check. This is fully
   backward compatible.

 * Change the semantic of the option. If --with-pcre-jit is passed,
   assume it is available. Only if it is *not* passed do the AC_TRY_RUN
   check. However, this is changing a bit the semantic of the option.

So perhaps the cache variable is the least annoying solution. Could you
have a look at implementing this ?

Thanks a lot!

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-04-13 19:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-02-15 23:20 [Buildroot] [PATCH 1/2] package/pcre2: add JIT support option Artem Panfilov
2019-02-15 23:20 ` [Buildroot] [PATCH 2/2] package/php: fix how external PCRE2 JIT is enabled Artem Panfilov
2019-04-13 19:58   ` Thomas Petazzoni
2019-04-13 19:54 ` [Buildroot] [PATCH 1/2] package/pcre2: add JIT support option Thomas Petazzoni

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.