Hello Sundeep,

this looks like something that requires a bit of time to set up,
reproduce and understand, and unfortunately I do not have the time
this week or the next. If you need my assistance you have to wait.

Alex

On Thu, 19 May 2022 at 13:12, Sundeep KOKKONDA
<sundeep.kokko...@gmail.com> wrote:
>
> Hello,
> On 14-05-2022 12:46, richard.pur...@linuxfoundation.org wrote:
>
> On Thu, 2022-05-12 at 22:59 -0700, Sundeep KOKKONDA wrote:
>
> [Yocto bug #14742]
> The build shows below error while building for arm machines.
> Exception: TypeError: int() argument must be a string, a bytes-like object or 
> a number, not 'NoneType'
> Detailed error info :
>
> Steps to reproduce:
> 1. Set MACHINE ?= "qemuarm" in local.conf & add 'TOOLCHAIN_HOST_TASK:append = 
> " packagegroup-rust-cross-canadian-${MACHINE}"'
> 2. bitbake core-image-minimal -cpopulate_sdk
>
> Complete Error:
> ERROR: rust-cross-canadian-arm-1.59.0-r0 do_rust_gen_targets: Error executing 
> a python function in exec_func_python() autogenerated:
> The stack trace of python calls that resulted in this exception/failure was:
> File: 'exec_func_python() autogenerated', lineno: 2, function: <module>
>      0001:
>  *** 0002:do_rust_gen_targets(d)
>      0003:
> File: 
> '/ala-lpggp31/skokkonda/yocto/poky/meta/recipes-devtools/rust/rust-cross-canadian-common.inc',
>  lineno: 31, function: do_rust_gen_targets
>      0027:
>      0028:LLVM_TARGET[x86_64] = "${RUST_HOST_SYS}"
>      0029:python do_rust_gen_targets () {
>      0030:    wd = d.getVar('WORKDIR') + '/targets/'
>  *** 0031:    rust_gen_target(d, 'TARGET', wd, 
> d.getVar('TARGET_LLVM_FEATURES') or "", d.getVar('TARGET_LLVM_CPU'), 
> d.getVar('TARGET_ARCH'))
>      0032:    rust_gen_target(d, 'HOST', wd, "", "generic", 
> d.getVar('HOST_ARCH'))
>      0033:    rust_gen_target(d, 'BUILD', wd, "", "generic", 
> d.getVar('BUILD_ARCH'))
>      0034:}
>      0035:
> File: 
> '/ala-lpggp31/skokkonda/yocto/poky/meta/recipes-devtools/rust/rust-common.inc',
>  lineno: 330, function: rust_gen_target
>      0326:    # build tspec
>      0327:    tspec = {}
>      0328:    tspec['llvm-target'] = d.getVarFlag('LLVM_TARGET', arch_abi)
>      0329:    tspec['data-layout'] = d.getVarFlag('DATA_LAYOUT', arch_abi)
>  *** 0330:    tspec['max-atomic-width'] = 
> int(d.getVarFlag('MAX_ATOMIC_WIDTH', arch_abi))
>      0331:    tspec['target-pointer-width'] = 
> d.getVarFlag('TARGET_POINTER_WIDTH', arch_abi)
>      0332:    tspec['target-c-int-width'] = 
> d.getVarFlag('TARGET_C_INT_WIDTH', arch_abi)
>      0333:    tspec['target-endian'] = d.getVarFlag('TARGET_ENDIAN', arch_abi)
>      0334:    tspec['arch'] = arch_to_rust_target_arch(rust_arch)
> Exception: TypeError: int() argument must be a string, a bytes-like object or 
> a number, not 'NoneType'
>
> Below are the local variables from rust_gen_target function for arm and 
> aarch64 targets. Refer below, the tspec varibles for 'arm' generated with 
> NoneType.
> (a) Locals at rust_gen_target for arm::
> tspec['data-layout'] =  None, Type of tspec['data-layout'] =  <class 
> 'NoneType'>
> tspec['data-layout'] =  None, Type of tspec['data-layout'] =  <class 
> 'NoneType'>
> DEBUG: Python function do_rust_gen_targets finished
> (b) Locals at rust_gen_target  for aarch64::
> tspec['data-layout'] =  aarch64-unknown-linux-gnu, Type of 
> tspec['data-layout'] =  <class 'str'>
> tspec['max-atomic-width'] =  128, Type of tspec['max-atomic-width'] =  <class 
> 'int'>
>
> Reason for changing arm-eabi to arm: The earlier changes introduced this bug, 
> so reverting the change 'arm-eabi' to 'arm' fixed the issue.
>
> The 'rust_gen_targets' Task added with its dependent variable list.
>
> Signed-off-by: Sundeep KOKKONDA <sundeep.kokko...@gmail.com>
> ---
>  meta/recipes-devtools/rust/rust-common.inc | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/meta/recipes-devtools/rust/rust-common.inc 
> b/meta/recipes-devtools/rust/rust-common.inc
> index 310aecef22..984fe9099e 100644
> --- a/meta/recipes-devtools/rust/rust-common.inc
> +++ b/meta/recipes-devtools/rust/rust-common.inc
> @@ -119,13 +119,13 @@ def llvm_features(d):
>
>
>  ## arm-unknown-linux-gnueabihf
> -DATA_LAYOUT[arm-eabi] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
> -LLVM_TARGET[arm-eabi] = "${RUST_TARGET_SYS}"
> -TARGET_ENDIAN[arm-eabi] = "little"
> -TARGET_POINTER_WIDTH[arm-eabi] = "32"
> -TARGET_C_INT_WIDTH[arm-eabi] = "32"
> -MAX_ATOMIC_WIDTH[arm-eabi] = "64"
> -FEATURES[arm-eabi] = "+v6,+vfp2"
> +DATA_LAYOUT[arm] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
> +LLVM_TARGET[arm] = "${RUST_TARGET_SYS}"
> +TARGET_ENDIAN[arm] = "little"
> +TARGET_POINTER_WIDTH[arm] = "32"
> +TARGET_C_INT_WIDTH[arm] = "32"
> +MAX_ATOMIC_WIDTH[arm] = "64"
> +FEATURES[arm] = "+v6,+vfp2"
>
>  ## armv7-unknown-linux-gnueabihf
>  DATA_LAYOUT[armv7-eabi] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
> @@ -360,6 +360,8 @@ def rust_gen_target(d, thing, wd, features, cpu, arch, 
> abi=""):
>      with open(wd + sys + '.json', 'w') as f:
>          json.dump(tspec, f, indent=4)
>
> +do_rust_gen_targets[vardeps] += "DATA_LAYOUT LLVM_TARGET TARGET_ENDIAN 
> TARGET_POINTER_WIDTH TARGET_C_INT_WIDTH MAX_ATOMIC_WIDTH FEATURES"
> +
>  python do_rust_gen_targets () {
>      wd = d.getVar('WORKDIR') + '/targets/'
>      build_arch = d.getVar('BUILD_ARCH')
>
> We need to split this into two. One patch to fix the determinism issue,
> the other to fix the arm bug.
>
> The "good" news is that this patch now fails consistently on the
> autobuilder, for example:
> https://autobuilder.yoctoproject.org/typhoon/#/builders/80/builds/3522
>
> sstatetests.SStateTests.test_sstate_allarch_samesigs is failing which
> you can rerun with:
>
> oe-selftest -r sstatetests.SStateTests.test_sstate_allarch_samesigs
>
> Now it fails reliably, we need to work out why the arm change breaks
> that.
>
> If you split the patches into two we can likely merge the
> reproducibility one, then onwards with the arm issue.
>
> In case it isn't clear, the failing signatures are for adwaita-icon-
> theme which depends on librsvg-native which depends on rust-native.
> What this means is that the signature of rust-native is changing when
> MACHINE is changed in that test. This shouldn't happen. We already knew
> that from our other discussion but now we can prove it. It would be
> nice if a test showed us the native hash was changing and that is the
> other issue we discussed but one step at a time!
>
> To be clear, rust-native (and it's signature) should be independent of
> MACHINE so we need to fix that. This means that currently rust-native
> varies and rebuilds when you change MACHINE (after the dependency fix
> in this patch).
>
> Hello Richard,
>
> I analyzed the test failure and it is because of the newly added dependency 
> on variable LLVM_TARGET. In think the patch split will not help here. We need 
> to understand the reason for the introduced change in first place from 'arm' 
> to 'arm-eabi' & why the rust_gen_target is not added dependency on these 
> variables.
>
> Hello Alex,
>
> We need a few inputs from you regarding a 'arm' bug which is in discussion in 
> this patch.
>
> The changes in file meta/recipes-devtools/rust/rust-common.inc with commit ID 
> 'd6b563710e6cc0857843433d85023d47f9f2037d' are causing the build error with 
> 'arm' architecture (the  tspec variables returning 'NoneType') when  
> 'TOOLCHAIN_HOST_TASK:append = " packagegroup-rust-cross-canadian-${MACHINE}" 
> added in local.conf (See the detailed build error at beginning of this email).
>
> And to fix that error the changes for 'arm' architecture are reverted 
> (#arm-unknown-linux-gnueabihf variables reverted to 'arm' from 'arm-eabi') 
> and the build error is solved. But, because no Task is depending on these 
> variables, bitbake is unable to detect these changes while rebuilding (In 
> other words, the Sstate-cache sigdata is not changed). So, the 
> rust_gen_target task dependency to these variables are added and then the 
> Sstate sigdata is updated with rebuild. However, the dependency (on variable 
> LLVM_TARGET) is causing the failure in oe-selftest 
> test_sstate_allarch_samesigs testcase.
>
> Can you let us know is it the right thing to add these variable dependencies 
> for rust_gen_target task? And, to fix the 'arm NoneType' error is it the 
> correct fix to revert the 'arm-eabi' to 'arm'?
>
> Let me know if anything is not clear.
>
> Below is the dependency list taken from bitbake-diffsigs from the 
> test_sstate_allarch_samesigs test sigdata for x86_64 & qemuarm machines. The 
> change in sigdata caused by differed values for variable 
> TUNE_FEATURES{callconvention-hard}.
> =================
> ...
> List of dependencies for variable LLVM_TARGET[aarch64] is ['RUST_TARGET_SYS']
> List of dependencies for variable LLVM_TARGET[arm] is ['RUST_TARGET_SYS']
> ...
> List of dependencies for variable RUST_TARGET_SYS is ['rust_base_triple']
> ...
> List of dependencies for variable rust_base_triple is ['determine_libc', 
> 'target_is_armv7']
> ...
> List of dependencies for variable determine_libc is ['BUILD_SYS', 'HOST_SYS', 
> 'RUST_LIBC', 'RUST_LIBC:class-native']    # The determine_libc is using the 
> TUNE_FEATURES
> List of dependencies for variable target_is_armv7 is []
> ...
> TUNE_FEATURES{callconvention-hard} = Unset    #in x86_64
> TUNE_FEATURES{callconvention-hard} = Set    #in qemuarm
> ...
> ====================
>
>
> Thanks,
> Sundeep K.
>
>
>
> Cheers,
>
> Richard
>
>
>
> 
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#165922): 
https://lists.openembedded.org/g/openembedded-core/message/165922
Mute This Topic: https://lists.openembedded.org/mt/91074788/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to