Skip to content
  • Paolo Bonzini's avatar
    92e288fc
    build: try both native and cross compilers · 92e288fc
    Paolo Bonzini authored
    
    
    Configure is trying to fall back on cross compilers for targets that
    can have bi-arch or bi-endian toolchains, but there are many corner
    cases where just checking the name can go wrong.  For example, the RHEL
    ppc64le compiler is bi-arch and bi-endian, but multilibs are disabled.
    Therefore it cannot be used to build 32-bit hosted binaries like the
    linux-user TCG tests.
    
    Trying the cross compiler first also does not work, and an example for
    this is also ppc64le.  The powerpc64-linux-gnu-gcc binary from the
    cross-gcc package is theoretically multilib-friendly, but it cannot
    find the CRT files on a ppc64le host, because they are not in the .../le
    multilib subdirectory.
    
    This can be fixed by testing both the native compiler and the cross
    compiler, and proceeding with the first one that works.  To do this,
    move the compiler usability check from the tests/tcg snippet to inside
    probe_target_compiler and, while at it, restrict the softmmu emulation
    target to basically a test for the presence of libgcc.
    
    Tested-by: default avatarMatheus Kowalczuk Ferst <matheus.ferst@eldorado.org.br>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    92e288fc
    build: try both native and cross compilers
    Paolo Bonzini authored
    
    
    Configure is trying to fall back on cross compilers for targets that
    can have bi-arch or bi-endian toolchains, but there are many corner
    cases where just checking the name can go wrong.  For example, the RHEL
    ppc64le compiler is bi-arch and bi-endian, but multilibs are disabled.
    Therefore it cannot be used to build 32-bit hosted binaries like the
    linux-user TCG tests.
    
    Trying the cross compiler first also does not work, and an example for
    this is also ppc64le.  The powerpc64-linux-gnu-gcc binary from the
    cross-gcc package is theoretically multilib-friendly, but it cannot
    find the CRT files on a ppc64le host, because they are not in the .../le
    multilib subdirectory.
    
    This can be fixed by testing both the native compiler and the cross
    compiler, and proceeding with the first one that works.  To do this,
    move the compiler usability check from the tests/tcg snippet to inside
    probe_target_compiler and, while at it, restrict the softmmu emulation
    target to basically a test for the presence of libgcc.
    
    Tested-by: default avatarMatheus Kowalczuk Ferst <matheus.ferst@eldorado.org.br>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Loading