Skip to content

Commit

Permalink
php: use qemu wrapper to build minilua
Browse files Browse the repository at this point in the history
minilua, by default, is compiled by the host machine as a
dependency for compiling the JIT/opcache extension. To
successfully cross-compile, this needs to be run under QEMU to
match the target architecture.

According to the [RFC](https://wiki.php.net/rfc/jit), only
x86 and x86_64 targets are supported.

Signed-off-by: Ashley Cox <[email protected]>
Signed-off-by: Claude Bing <[email protected]>
Signed-off-by: Khem Raj <[email protected]>
  • Loading branch information
Claude Bing authored and kraj committed Nov 16, 2021
1 parent ab1057d commit 265bab8
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--- a/ext/opcache/jit/Makefile.frag 2021-10-19 06:34:32.000000000 -0400
+++ b/ext/opcache/jit/Makefile.frag 2021-11-15 15:10:41.437289836 -0500
@@ -3,7 +3,7 @@ $(builddir)/minilua: $(srcdir)/jit/dynas
$(CC) $(srcdir)/jit/dynasm/minilua.c -lm -o $@

$(builddir)/jit/zend_jit_x86.c: $(srcdir)/jit/zend_jit_x86.dasc $(srcdir)/jit/dynasm/*.lua $(builddir)/minilua
- $(builddir)/minilua $(srcdir)/jit/dynasm/dynasm.lua $(DASM_FLAGS) -o $@ $(srcdir)/jit/zend_jit_x86.dasc
+ $(top_srcdir)/qemuwrapper $(builddir)/minilua $(srcdir)/jit/dynasm/dynasm.lua $(DASM_FLAGS) -o $@ $(srcdir)/jit/zend_jit_x86.dasc

$(builddir)/jit/zend_jit.lo: \
$(builddir)/jit/zend_jit_x86.c \

This file was deleted.

17 changes: 14 additions & 3 deletions meta-oe/recipes-devtools/php/php_8.0.12.bb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ LICENSE = "PHP-3.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=99532e0f6620bc9bca34f12fadaee33c"

BBCLASSEXTEND = "native"
DEPENDS = "zlib bzip2 libxml2 virtual/libiconv php-native lemon-native"
DEPENDS = "zlib bzip2 libxml2 virtual/libiconv php-native lemon-native qemu-native"
DEPENDS:class-native = "zlib-native libxml2-native"

PHP_MAJOR_VERSION = "${@d.getVar('PV').split('.')[0]}"
Expand All @@ -25,7 +25,7 @@ SRC_URI:append:class-target = " \
file://0006-ext-phar-Makefile.frag-Fix-phar-packaging.patch \
file://0007-sapi-cli-config.m4-fix-build-directory.patch \
file://0008-ext-imap-config.m4-fix-include-paths.patch \
file://1010-Fix-opcache-jit-minilua-compiling.patch \
file://0011-use-qemuwrapper-for-minilua.patch \
file://php-fpm.conf \
file://php-fpm-apache.conf \
file://70_mod_php${PHP_MAJOR_VERSION}.conf \
Expand All @@ -36,7 +36,7 @@ S = "${WORKDIR}/php-${PV}"
SRC_URI[sha256sum] = "b4886db1df322dc8fb128d8b34ae7e94f6fc682ecb29ff4f5a591d4de9feadbf"


inherit autotools pkgconfig python3native gettext
inherit autotools pkgconfig python3native gettext qemu

# phpize is not scanned for absolute paths by default (but php-config is).
#
Expand Down Expand Up @@ -128,6 +128,17 @@ do_configure:prepend () {
find ${S} -name config.m4 | xargs -n1 sed -i 's!APXS_HTTPD=.*!APXS_HTTPD=${STAGING_SBINDIR_NATIVE}/httpd!'
}

do_configure:prepend:class-target () {
# Write out a qemu wrapper that will be used by the makefile
# so that it can run minilua through that.
qemu_binary="${@qemu_wrapper_cmdline(d, d.getVar('STAGING_DIR_HOST'), [d.expand('${STAGING_DIR_HOST}${libdir}'),d.expand('${STAGING_DIR_HOST}${base_libdir}')])}"
cat > ${S}/qemuwrapper << EOF
#!/bin/sh
$qemu_binary "\$@"
EOF
chmod +x ${S}/qemuwrapper
}

do_configure:append() {
# No, libtool, we really don't want rpath set...
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' ${HOST_SYS}-libtool
Expand Down

0 comments on commit 265bab8

Please sign in to comment.