简体   繁体   中英

Enable php intl extension in Yocto

Following this answer I put in meta-custom-layer/recipes-devtools/php/php_%.bbappend file the this content:

PACKAGECONFIG_pn-php = "mysql sqlite3 imap opcache openssl ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 pam', d)} apache2"

EXTRA_OECONF_append_class-target = " --with-curl=${STAGING_LIBDIR}/.."
DEPENDS_append_class-target = " icu curl"

EXTRA_OECONF =+ " --enable-mbstring --with-openssl --enable-bcmath --enable-sockets --enable-intl \
                  --with-icu-dir=${BASE_WORKDIR}/cortexa7t2hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/icu/62.1-r0/recipe-sysroot-native/usr \
                        
                  , \
                  , icu-native icu"
PACKAGECONFIG ??= "sqlite3"
PACKAGECONFIG[sqlite3] = "--with-sqlite3=${STAGING_LIBDIR}/.. \
                          --with-pdo-sqlite=${STAGING_LIBDIR}/.. \
                          , \
                          ,sqlite3"

LIBS_pn-php =" -lpthread "
export LIBS
THREADS_pn-php = "pthread"
export THREADS

but after bitbake icu under ${BASE_WORKDIR}/cortexa7t2hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/icu/62.1-r0 there's only a temp folder with all the icu tasks, but no recipe-sysroot-native . I also tried to bitbake build-sysroots with no changes.

Hence, bitbake php fails because it doesn't find the expected files in that folder.

UPDATE

Here the error message:

checking for location of ICU headers and libraries... not found

configure: error: Unable to detect ICU prefix or /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7t2hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/icu/62.1-r0/recipe-sysroot-native/usr/bin/icu-config failed.

I found icu-config here:

work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/recipe-sysroot/usr/bin/crossscripts/icu-config

but because it tries to append /bin to the path set on --with-icu-dir I'm not able to tell it where to find icu-config .

UPDATE2

After following the hints of @Jussi Kukkonen I get these weird compile errors:

cc1: warning: include location "/usr/include" is unsafe for cross-compilation [-Wpoison-system-directories]
cc1: warning: include location "/usr/include" is unsafe for cross-compilation [-Wpoison-system-directories]
In file included from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/../TSRM/TSRM.h:52,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/zend_portability.h:49,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/zend_types.h:27,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/zend.h:29,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/main/php.h:35,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/ext/intl/dateformat/../php_intl.h:23,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/ext/intl/dateformat/dateformat_format.c:21:
/usr/include/pthread.h:681:6: warning: 'regparm' attribute directive ignored [-Wattributes]
      __cleanup_fct_attribute;
      ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:693:3: warning: 'regparm' attribute directive ignored [-Wattributes]
   __cleanup_fct_attribute;
   ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:716:6: warning: 'regparm' attribute directive ignored [-Wattributes]
      __cleanup_fct_attribute;
      ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:729:3: warning: 'regparm' attribute directive ignored [-Wattributes]
   __cleanup_fct_attribute;
   ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:738:6: warning: 'regparm' attribute directive ignored [-Wattributes]
      ;
      ^
cc1: warning: include location "/usr/include" is unsafe for cross-compilation [-Wpoison-system-directories]
In file included from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/../TSRM/TSRM.h:52,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/zend_portability.h:49,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/zend_types.h:27,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/zend.h:29,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/main/php.h:35,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/ext/intl/php_intl.h:23,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/ext/intl/dateformat/dateformat_parse.c:24:
/usr/include/pthread.h:681:6: warning: 'regparm' attribute directive ignored [-Wattributes]
      __cleanup_fct_attribute;
      ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:693:3: warning: 'regparm' attribute directive ignored [-Wattributes]
   __cleanup_fct_attribute;
   ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:716:6: warning: 'regparm' attribute directive ignored [-Wattributes]
      __cleanup_fct_attribute;
      ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:729:3: warning: 'regparm' attribute directive ignored [-Wattributes]
   __cleanup_fct_attribute;
   ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:738:6: warning: 'regparm' attribute directive ignored [-Wattributes]
      ;
      ^
In file included from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/../TSRM/TSRM.h:52,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/zend_portability.h:49,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/zend_types.h:27,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/Zend/zend.h:29,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/main/php.h:35,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/ext/intl/php_intl.h:23,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/ext/intl/msgformat/msgformat.c:24:
/usr/include/pthread.h:681:6: warning: 'regparm' attribute directive ignored [-Wattributes]
      __cleanup_fct_attribute;
      ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:693:3: warning: 'regparm' attribute directive ignored [-Wattributes]
   __cleanup_fct_attribute;
   ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:716:6: warning: 'regparm' attribute directive ignored [-Wattributes]
      __cleanup_fct_attribute;
      ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:729:3: warning: 'regparm' attribute directive ignored [-Wattributes]
   __cleanup_fct_attribute;
   ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pthread.h:738:6: warning: 'regparm' attribute directive ignored [-Wattributes]
      ;
      ^
In file included from /usr/include/math.h:472,
                 from /local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/ext/intl/dateformat/dateformat_parse.c:22:
/local/STM32MP15-Ecosystem-v1.0.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxeglfs-stm32mp1/tmp-glibc/work/cortexa7hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/php/7.2.10-r0/php-7.2.10/ext/intl/dateformat/dateformat_parse.c: In function 'zif_datefmt_parse':
/usr/include/bits/mathinline.h:751:3: error: invalid 'asm': invalid operand for code 'w'
   __asm __volatile ("fnstcw %3\n\t"           \
   ^~~~~
/usr/include/bits/mathinline.h:503:5: note: in definition of macro '__inline_mathcodeNP_'
     code;              \
     ^~~~
/usr/include/bits/mathinline.h:746:1: note: in expansion of macro '__inline_mathcodeNP'
 __inline_mathcodeNP (floor, __x, \
 ^~~~~~~~~~~~~~~~~~~
/usr/include/bits/mathinline.h:769:3: error: invalid 'asm': invalid operand for code 'w'
   __asm __volatile ("fnstcw %3\n\t"           \
   ^~~~~
/usr/include/bits/mathinline.h:503:5: note: in definition of macro '__inline_mathcodeNP_'
     code;              \
     ^~~~
/usr/include/bits/mathinline.h:764:1: note: in expansion of macro '__inline_mathcodeNP'
 __inline_mathcodeNP (ceil, __x, \
 ^~~~~~~~~~~~~~~~~~~
{standard input}: Assembler messages:
{standard input}:463: Error: bad instruction `fnstcw [sp,#16]'
{standard input}:464: Error: bad instruction `movzwl [sp,#16],r3'
{standard input}:465: Error: bad instruction `andl $0xf3ff,r3'
{standard input}:466: Error: bad instruction `orl $0x0400,r3'
{standard input}:467: Error: ARM register expected -- `movw ,[sp,#18]'
{standard input}:468: Error: bad instruction `fldcw [sp,#18]'
{standard input}:469: Error: bad instruction `frndint'
{standard input}:470: Error: bad instruction `fldcw [sp,#16]'
{standard input}:685: Error: bad instruction `fnstcw [sp,#16]'
{standard input}:686: Error: bad instruction `movzwl [sp,#16],r3'
{standard input}:687: Error: bad instruction `andl $0xf3ff,r3'
{standard input}:688: Error: bad instruction `orl $0x0800,r3'
{standard input}:689: Error: ARM register expected -- `movw ,[sp,#18]'
{standard input}:690: Error: bad instruction `fldcw [sp,#18]'
{standard input}:691: Error: bad instruction `frndint'
{standard input}:692: Error: bad instruction `fldcw [sp,#16]'
Makefile:1007: recipe for target 'ext/intl/dateformat/dateformat_parse.lo' failed
make: *** [ext/intl/dateformat/dateformat_parse.lo] Error 1
make: *** Waiting for unfinished jobs....
ERROR: oe_runmake failed
WARNING: exit code 1 from a shell command.
ERROR: Function failed: do_compile 

So here's how I'd try to do it (I'm not a php specialist and the build seems to take such a long time that I'm not testing this on target myself). The following creates a new packageconfig

PACKAGECONFIG[intl] = "--enable-intl,--disable-intl,icu"

php actually supports pkg-config so it should just find icu with that. At least configure works fine here on Yocto Warrior: php finds icu and enables intl.

With that addition you can then add "intl" to your PACKAGECONFIG line (and remove "_pn-php" postfix: it is not useful inside the recipe file or bbappend):

PACKAGECONFIG = "intl mysql sqlite3 imap opcache openssl ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 pam', d)} apache2"

You should also be able to remove that EXTRA_OECONF monstrosity. While you're at it maybe remove all of the sqlite3 lines unless you know you really need them (they are in all maintained yocto versions already as far as I can tell). So remove these:

EXTRA_OECONF =+ " --enable-mbstring --with-openssl --enable-bcmath --enable-sockets --enable-intl \
                  --with-icu-dir=${BASE_WORKDIR}/cortexa7t2hf-neon-vfpv4-openstlinux_eglfs-linux-gnueabi/icu/62.1-r0/recipe-sysroot-native/usr \

                  , \
                  , icu-native icu"
PACKAGECONFIG ??= "sqlite3"
PACKAGECONFIG[sqlite3] = "--with-sqlite3=${STAGING_LIBDIR}/.. \
                          --with-pdo-sqlite=${STAGING_LIBDIR}/.. \
                          , \
                          ,sqlite3"

To tell you the truth none of the remaining lines seem useful either but maybe they're not actively harmful.

Something is wrong with the PHP 7.2.1 recipe. If you you are on "thud" branch for your layers then you might want to either switch to "warrior" branch and re-run the bitbake php -v command or copy the recipe for php 7.3.x + files to your php recipe directory from here https://github.com/openembedded/meta-openembedded/tree/master/meta-oe/recipes-devtools/php .

Also, Jussi Kukkonen is correct in that you could just use the PACKAGECONFIG option. Your mileage will vary to the third party libs you want for php, but I think the issue here is the recipe. I got php working on both thud and warrior branches using the following:

EXTRA_OECONF_append_class-target = " --with-curl=${STAGING_LIBDIR}/.."
DEPENDS_append_class-target = " icu curl openssl"

EXTRA_OECONF =+ " --enable-mbstring --with-openssl=${STAGING_DIR_TARGET}${exec_prefix} --enable-bcmath --enable-sockets --enable-intl \
                      , \
                      , icu-native icu"
PACKAGECONFIG ??= "intl sqlite3"
PACKAGECONFIG[sqlite3] = "--with-openssl=${STAGING_DIR_TARGET}${exec_prefix} \
              --with-sqlite3=${STAGING_LIBDIR}/.. \
                          --with-pdo-sqlite=${STAGING_LIBDIR}/.. \
                          , \
                          ,sqlite3"

LIBS_pn-php =" -lpthread "
export LIBS
THREADS_pn-php = "pthread"
export THREADS

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM