Created attachment 867932 [details] build.log >>> Test phase: dev-python/pydantic-core-2.5.0 * python3_11: running distutils-r1_run_phase python_test python3.11 -m pytest -vv -ra -l -Wdefault --color=no -o console_output_style=count -p no:cov -p no:flake8 -p no:flakes -p no:pylint -p no:markdown -p no:sugar -p no:xvfb -p no:tavern --ignore tests/benchmarks -p pytest_mock -p timeout ImportError while loading conftest '/var/tmp/portage/dev-python/pydantic-core-2.5.0/work/pydantic_core-2.5.0/tests/conftest.py'. tests/conftest.py:16: in <module> from pydantic_core import ArgsKwargs, SchemaValidator, ValidationError ../pydantic_core-2.5.0-python3_11/install/usr/lib/python3.11/site-packages/pydantic_core/__init__.py:6: in <module> from ._pydantic_core import ( E ImportError: /var/tmp/portage/dev-python/pydantic-core-2.5.0/work/pydantic_core-2.5.0-python3_11/install/usr/lib/python3.11/site-packages/pydantic_core/_pydantic_core.cpython-311-powerpc-linux-gnu.so: undefined symbol: __atomic_load_8 * ERROR: dev-python/pydantic-core-2.5.0::gentoo failed (test phase): * pytest failed with python3.11 --- # emerge --info Portage 3.0.49 (python 3.11.4-final-0, default/linux/ppc/17.0/systemd/merged-usr, gcc-13, glibc-2.37-r4, 6.1.27-gentoo-dist-hardened ppc) ================================================================= System uname: Linux-6.1.27-gentoo-dist-hardened-ppc-POWER9_-architected-,_altivec_supported-with-glibc2.37 KiB Mem: 32847428 total, 4213388 free KiB Swap: 67108860 total, 66938292 free Timestamp of repository gentoo: Wed, 16 Aug 2023 06:16:36 +0000 sh bash 5.2_p15-r6 ld GNU ld (Gentoo 2.41 p2) 2.41.0 app-misc/pax-utils: 1.3.7::gentoo app-shells/bash: 5.2_p15-r6::gentoo dev-lang/perl: 5.38.0-r1::gentoo dev-lang/python: 3.11.4::gentoo, 3.12.0_beta4_p2::gentoo dev-lang/rust-bin: 1.71.1::gentoo dev-util/cmake: 3.27.1-r1::gentoo dev-util/meson: 1.2.0::gentoo sys-apps/baselayout: 2.14::gentoo sys-apps/sandbox: 2.37::gentoo sys-apps/systemd: 254-r1::gentoo sys-devel/autoconf: 2.71-r7::gentoo sys-devel/automake: 1.16.5-r1::gentoo sys-devel/binutils: 2.41-r1::gentoo sys-devel/binutils-config: 5.5::gentoo sys-devel/gcc: 10.5.0::gentoo, 11.4.1_p20230622::gentoo, 12.3.1_p20230623::gentoo, 13.2.0::gentoo, 14.0.0_pre20230702::gentoo sys-devel/gcc-config: 2.11::gentoo sys-devel/libtool: 2.4.7-r1::gentoo sys-devel/llvm: 16.0.6::gentoo sys-devel/make: 4.4.1-r1::gentoo sys-kernel/linux-headers: 6.4::gentoo (virtual/os-headers) sys-libs/glibc: 2.37-r4::gentoo Repositories: gentoo location: /var/db/repos/gentoo sync-type: rsync sync-uri: rsync://rsync.gentoo.org/gentoo-portage priority: -1000 volatile: False sync-rsync-verify-max-age: 24 sync-rsync-extra-opts: sync-rsync-verify-metamanifest: yes sync-rsync-verify-jobs: 1 ACCEPT_KEYWORDS="ppc ~ppc" ACCEPT_LICENSE="*" CBUILD="powerpc-unknown-linux-gnu" CFLAGS="-O2 -mcpu=powerpc -mtune=powerpc -pipe" CHOST="powerpc-unknown-linux-gnu" CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d" CXXFLAGS="-O2 -mcpu=powerpc -mtune=powerpc -pipe" DISTDIR="/var/cache/distfiles" EMERGE_DEFAULT_OPTS="--nospinner --ask-enter-invalid --quiet-build --keep-going --complete-graph --with-bdeps=y --load-average 15 --deep --jobs=4" ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GDK_PIXBUF_MODULE_FILE GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR XDG_STATE_HOME" FCFLAGS="-O2 -mcpu=powerpc -mtune=powerpc -pipe" FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs binpkg-multi-instance buildpkg-live clean-logs config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms split-elog split-log strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" FFLAGS="-O2 -mcpu=powerpc -mtune=powerpc -pipe" GENTOO_MIRRORS="https://gentoo.osuosl.org/" LANG="C.UTF8" LDFLAGS="-Wl,-O1 -Wl,--as-needed" LEX="flex" LINGUAS="en" MAKEOPTS="-j16 -l15" PKGDIR="/var/cache/binpkgs" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git" PORTAGE_TMPDIR="/var/tmp" SHELL="/bin/bash" USE="acl big-endian bzip2 cli crypt dri fortran gdbm iconv ipv6 ncurses nls nptl openmp pam pcre ppc readline seccomp ssl systemd test-rust udev unicode xattr zlib" ADA_TARGET="gnat_2021" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon sheets words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock greis isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="libinput" KERNEL="linux" L10N="en" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LUA_SINGLE_TARGET="lua5-1" LUA_TARGETS="lua5-1" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php8-1" POSTGRES_TARGETS="postgres15" PYTHON_SINGLE_TARGET="python3_11" PYTHON_TARGETS="python3_11" RUBY_TARGETS="ruby31" VIDEO_CARDS="fbdev mga r128 radeon dummy v4l" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq proto steal rawnat logmark ipmark dhcpmac delude chaos account" Unset: ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, INSTALL_MASK, LC_ALL, LD, LFLAGS, LIBTOOL, MAKE, MAKEFLAGS, NM, OBJCOPY, OBJDUMP, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RANLIB, READELF, RUSTFLAGS, SIZE, STRINGS, STRIP, YACC, YFLAGS
It uses maturin so ccing ionen in case he has any idea how to workaround/fix it properly
(In reply to Sam James from comment #1) > It uses maturin so ccing ionen in case he has any idea how to workaround/fix > it properly No idea, sorry. Haven't really had to deal with rust atomic issues except the indicatif crate failing on ppc32 due to trying to use AtomicU64 until it migrated[1] to portable-atomic (but rustc just aborts rather than give undefined symbols then). afaik pydantic-core's std::sync::atomic usage (added in >=2.3.0) should(?) work as-is on ppc32 with everything being handled by rustc [2]. Maybe things are different when building extensions w/ maturin, but I don't know. fwiw could try pydantic-core-2.2.0, albeit it could be related to crates. [1] https://github.com/console-rs/indicatif/pull/484 [2] https://doc.rust-lang.org/std/sync/atomic/#portability
fwics rust should handle this in compiler/rustc_llvm/build.rs: if (target.starts_with("arm") && !target.contains("freebsd")) || target.starts_with("mips-") || target.starts_with("mipsel-") || target.starts_with("powerpc-") { // 32-bit targets need to link libatomic. println!("cargo:rustc-link-lib=atomic"); That aside, as far as workarounds go, afaik RUSTFLAGS+" -C link-args=-latomic" should link it in (wish could use DISTUTILS_ARGS for this but maturin removed the option to pass generic arguments).
(In reply to Ionen Wolkens from comment #3) > RUSTFLAGS+" -C link-args=-latomic" Actually I think you can straight up do RUSTFLAGS+=" -latomic"
(In reply to Ionen Wolkens from comment #2) > albeit it could be related to crates. wrt crates, I do see: cargo_home/gentoo/libmimalloc-sys-0.1.33/c_src/mimalloc/CMakeLists.txt:option(MI_USE_LIBATOMIC "Explicitly link with -latomic (on older systems) (deprecated and detected automatically)" OFF) And then pydantic-core enables mimalloc by default but it could be disabled through DISTUTILS_ARGS for ppc32: default = ["mimalloc"] Unsure if it's really that though.
I've confirmed that it loads successfully without mimalloc. I'll file a bug upstream. Should we link -latomic or disable mimalloc?
The bug has been closed via the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6e315c3cba2e4dd28ea6a76a87e7051b10e449d9 commit 6e315c3cba2e4dd28ea6a76a87e7051b10e449d9 Author: Michał Górny <mgorny@gentoo.org> AuthorDate: 2023-08-16 12:54:11 +0000 Commit: Michał Górny <mgorny@gentoo.org> CommitDate: 2023-08-16 12:54:30 +0000 dev-python/pydantic-core: Disable mimalloc since it's buggy Disable mimalloc since it fails to -latomic on some platforms, and since it's deep static Rust crap, it's easier to disable it entirely than fight this nonsense. Closes: https://bugs.gentoo.org/912341 Signed-off-by: Michał Górny <mgorny@gentoo.org> .../{pydantic-core-2.4.0.ebuild => pydantic-core-2.4.0-r1.ebuild} | 6 ++++++ .../{pydantic-core-2.5.0.ebuild => pydantic-core-2.5.0-r1.ebuild} | 6 ++++++ 2 files changed, 12 insertions(+)