Cc'ing CI maintainers.

On 19/3/25 03:30, Tanish Desai wrote:
The issue started after commit 
https://github.com/qemu/qemu/commit/59f4d65584bd3372070e2484876436c8d02505e4

Reproduction:
   1. In the build directory on MacOS (haven't tried on other OS), run:
        ../configure --enable-rust --target-list=aarch64-softmmu

This config isn't covered on our CI, we only test --enable-rust on
Linux. Should we also test it for all non-Linux hosts? I'd rather not...

   2. Then run either:
        ninja -C .
        OR
        make
   3. At the end, you will encounter the error:
        duplicate symbol '_pl011_create' in:
            
/Users/tanishdesai37/Downloads/qemu-master/build/libcommon.a.p/hw_char_pl011.c.o
            
librust_aarch64_softmmu.a[5](pl011.pl011.390d424367e209af-cgu.1.rcgu.o)
        ld: 1 duplicate symbols

Root cause:
   Both CONFIG_PL011 and X_PL011_RUST are selected, causing C++ and Rust to 
produce the same object.
   This is due to the commit above where 'select PL011' forces a true condition 
instead of checking if HAVE_RUST is true.
   If HAVE_RUST is true, X_PL011_RUST should be selected instead of 
CONFIG_PL011.

Signed-off-by: Tanish Desai <tanishdesa...@gmail.com>
---
  hw/vmapple/Kconfig | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/hw/vmapple/Kconfig b/hw/vmapple/Kconfig
index 2382b297672..01bcbf40e00 100644
--- a/hw/vmapple/Kconfig
+++ b/hw/vmapple/Kconfig
@@ -22,7 +22,8 @@ config VMAPPLE
      select PLATFORM_BUS
      select PCI_EXPRESS
      select PCI_EXPRESS_GENERIC_BRIDGE
-    select PL011 # UART
+    select PL011 if !HAVE_RUST # UART
+    select X_PL011_RUST if HAVE_RUST # UART
      select PL031 # RTC
      select PL061 # GPIO
      select GPIO_PWR


Reply via email to