[OE-core] [oe] [meta-java][PATCH] openjdk-8-common: Fix the issue of building failed adlc on host with gcc < 6

Andrew Goodbody andrew.goodbody at cambrionix.com
Tue Oct 3 10:14:34 UTC 2017


> -----Original Message-----
> From: Fupan Li <fupan.li at windriver.com>
> 
> The patch recipes-core/openjdk/patches-openjdk-8/openjdk8-fix-adlc-
> flags.patch
> had tried to fix this issue, and it tried to filter out the
> TARGET_FLAGS/TARGET_
> CXXFLGAS, but for the flags such as "-fno-lifetime-dse" was added to
> CFLAGS/CXXFLAGS,
> directly, thus that patch failed to filter it out.
> 
> To fix this issue, it's better to add those GCC version specific flags to
> BUILD_CFLAGS/
> BUILD_CXXFLAGS and TARGET_CFLAGS/TARGET_CXXFLAGS separatedly,
> thus that patch can work
> as expected.
> 
> Signed-off-by: Fupan Li <fupan.li at windriver.com>
> ---
>  recipes-core/openjdk/openjdk-8-common.inc | 36
> ++++++++++++++++++++-----------
>  1 file changed, 24 insertions(+), 12 deletions(-)
> 
> diff --git a/recipes-core/openjdk/openjdk-8-common.inc b/recipes-
> core/openjdk/openjdk-8-common.inc
> index 83828e1..c609232 100644
> --- a/recipes-core/openjdk/openjdk-8-common.inc
> +++ b/recipes-core/openjdk/openjdk-8-common.inc
> @@ -231,27 +231,39 @@ FLAGS_GCC7 = "-fno-lifetime-dse -fno-delete-null-
> pointer-checks"
>  # version is and only add the flags that are appropriate for that GCC
>  # version.
> 
> -def version_specific_cflags(d):
> +def version_specific_cflags(d, toolchain):
>      extraflags = None
>      version = None
> 
> -    if bb.data.inherits_class('native', d):
> -        from subprocess import Popen, PIPE
> +    from subprocess import Popen, PIPE
> +    cmd = d.expand('%s -dumpversion' % toolchain ).split()
> +    cc = Popen(cmd, stdout=PIPE, stderr=PIPE)
> +    version = cc.communicate()[0].decode('utf-8')[0]
> 
> -        cmd = d.expand('${CC} -dumpversion').split()
> -        cc = Popen(cmd, stdout=PIPE, stderr=PIPE)
> -        version = cc.communicate()[0].decode('utf-8')[0]
> +    if version.isdigit():
> +        extraflags = d.getVar('FLAGS_GCC%d' % int(version), True) or ''
> +        return extraflags
> +    return ''
> +
> +python __anonymous() {
> +    if bb.data.inherits_class('native', d):
> +        toolchain = d.getVar('CC', True)
> +        extraflags = version_specific_cflags(d, toolchain)
> +        d.appendVar("CFLAGS", ' ' + extraflags)
> +        d.appendVar("CXXFLAGS", ' ' + extraflags)
>      else:
>          # in the cross case, trust that GCCVERSION is correct. This won't
>          # work if the native toolchain is Clang, but as of this writing that
>          # doesn't work anyway.
>          version = d.getVar('GCCVERSION', expand=True)[0]
> -
> -    if version.isdigit():
>          extraflags = d.getVar('FLAGS_GCC%d' % int(version), True) or ''
> -        return extraflags
> -    return ''
> +        d.appendVar("TARGET_CFLAGS", ' ' + extraflags)
> +        d.appendVar("TARGET_CXXFLAGS", ' ' + extraflags)
> +
> +        toolchain = d.getVar('BUILD_CC', True)
> +        extraflags = version_specific_cflags(d, toolchain)
> +        d.appendVar("BUILD_CFLAGS", ' ' + extraflags)
> +        d.appendVar("BUILD_CXXFLAGS", ' ' + extraflags)
> +}
> 
> -CFLAGS_append = " ${@version_specific_cflags(d)}"
> -CXXFLAGS_append = " ${@version_specific_cflags(d)}"
>  CXX_append = " -std=gnu++98"
> --
> 2.11.0

I get the following build failure with the above patch now, backing it out makes the build work OK.

ERROR: /home/andrew/src/camol3/camol/layers/meta-java/recipes-core/openjdk/openjre-8_102b14.bb: Error executing a python function in <code>:

The stack trace of python calls that resulted in this exception/failure was:
File: '<code>', lineno: 13, function: <module>
     0009:__anon_35__home_andrew_src_camol3_camol_layers_openembedded_core_meta_classes_devshell_bbclass(d)
     0010:__anon_101__home_andrew_src_camol3_camol_layers_openembedded_core_meta_classes_sstate_bbclass(d)
     0011:__anon_313__home_andrew_src_camol3_camol_layers_openembedded_core_meta_classes_package_ipk_bbclass(d)
     0012:__anon_154__home_andrew_src_camol3_camol_layers_openembedded_core_meta_classes_siteinfo_bbclass(d)
 *** 0013:__anon_267__home_andrew_src_camol3_camol_layers_meta_java_recipes_core_openjdk_openjdk_8_common_inc(d)
     0014:__anon_108__home_andrew_src_camol3_camol_layers_openembedded_core_meta_classes_update_alternatives_bbclass(d)
File: '/home/andrew/src/camol3/camol/layers/meta-java/recipes-core/openjdk/openjdk-8-common.inc', lineno: 260, function: __anon_267__home_andrew_src_camol3_camol_layers_meta_java_recipes_core_openjdk_openjdk_8_common_inc
     0256:        # work if the native toolchain is Clang, but as of this writing that
     0257:        # doesn't work anyway.
     0258:        version = d.getVar('GCCVERSION', expand=True)[0]
     0259:        extraflags = d.getVar('FLAGS_GCC%d' % int(version), True) or ''
 *** 0260:        d.appendVar("TARGET_CFLAGS", ' ' + extraflags)
     0261:        d.appendVar("TARGET_CXXFLAGS", ' ' + extraflags)
     0262:
     0263:        toolchain = d.getVar('BUILD_CC', True)
     0264:        extraflags = version_specific_cflags(d, toolchain)
Exception: ValueError: invalid literal for int() with base 10: 'l'

ERROR: Failed to parse recipe: /home/andrew/src/camol3/camol/layers/meta-java/recipes-core/openjdk/openjre-8_102b14.bb
ERROR: /home/andrew/src/camol3/camol/layers/meta-java/recipes-core/openjdk/openjdk-8_102b14.bb: Error executing a python function in <code>:

The stack trace of python calls that resulted in this exception/failure was:
File: '<code>', lineno: 13, function: <module>
     0009:__anon_35__home_andrew_src_camol3_camol_layers_openembedded_core_meta_classes_devshell_bbclass(d)
     0010:__anon_101__home_andrew_src_camol3_camol_layers_openembedded_core_meta_classes_sstate_bbclass(d)
     0011:__anon_313__home_andrew_src_camol3_camol_layers_openembedded_core_meta_classes_package_ipk_bbclass(d)
     0012:__anon_154__home_andrew_src_camol3_camol_layers_openembedded_core_meta_classes_siteinfo_bbclass(d)
 *** 0013:__anon_267__home_andrew_src_camol3_camol_layers_meta_java_recipes_core_openjdk_openjdk_8_common_inc(d)
     0014:__anon_108__home_andrew_src_camol3_camol_layers_openembedded_core_meta_classes_update_alternatives_bbclass(d)
File: '/home/andrew/src/camol3/camol/layers/meta-java/recipes-core/openjdk/openjdk-8-common.inc', lineno: 260, function: __anon_267__home_andrew_src_camol3_camol_layers_meta_java_recipes_core_openjdk_openjdk_8_common_inc
     0256:        # work if the native toolchain is Clang, but as of this writing that
     0257:        # doesn't work anyway.
     0258:        version = d.getVar('GCCVERSION', expand=True)[0]
     0259:        extraflags = d.getVar('FLAGS_GCC%d' % int(version), True) or ''
 *** 0260:        d.appendVar("TARGET_CFLAGS", ' ' + extraflags)
     0261:        d.appendVar("TARGET_CXXFLAGS", ' ' + extraflags)
     0262:
     0263:        toolchain = d.getVar('BUILD_CC', True)
     0264:        extraflags = version_specific_cflags(d, toolchain)
Exception: ValueError: invalid literal for int() with base 10: 'l'

Andrew



More information about the Openembedded-core mailing list