Closed Bug 1951581 Opened 16 days ago Closed 13 days ago

Firefox-136.0: when built with --with-system-av1 linking fails with "ld.lld: error: undefined symbol: aom_codec_av1_cx"

Categories

(Firefox Build System :: General, defect)

Firefox 136
defect

Tracking

(firefox138 fixed)

RESOLVED FIXED
138 Branch
Tracking Status
firefox138 --- fixed

People

(Reporter: juippis, Assigned: sergesanspaille)

References

Details

Attachments

(3 files)

Steps to reproduce:

Build firefox-136.0 with the newly introduced --with-system-av1 flag that uses system lib instead of the bundled one.

Actual results:

Linking phase fails to:

ld.lld: error: undefined symbol: aom_codec_av1_cx
 9:22.05 /usr/lib/llvm/19/bin/x86_64-pc-linux-gnu-clang++-19 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fstack-clash-protection -fstrict-flex-arrays=1 -fno-rtti -pthread -fno-sized-deallocation -fno-aligned-new -ffunction-sections -fdata-sections -fno-math-errno -fno-exceptions -fPIC -march=native -pipe -frecord-gcc-switches -O2 -fomit-frame-pointer -funwind-tables -shared -Wl,-z,defs -Wl,--gc-sections -Wl,-h,libmozavcodec.so -o ../../../dist/bin/libmozavcodec.so -Wl,@/var/tmp/portage/www-client/firefox-136.0/work/firefox_build/media/ffvpx/libavcodec/libmozavcodec_so.list  -B /var/tmp/portage/www-client/firefox-136.0/work/firefox_build/build/unix/elfhack -Wl,--real-linker,/usr/lib/llvm/19/bin/ld.lld  -Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,--defsym=__gentoo_check_ldflags__=0 -Wl,--undefined-version -Wl,-rpath=/usr/lib64/firefox,--enable-new-dtags -Wl,-z,noexecstack -Wl,-z,text -Wl,-z,relro -Wl,-z,now -Wl,-z,nocopyreloc -fuse-ld=lld -fstack-protector-strong -fstack-clash-protection -Wl,-rpath-link,/var/tmp/portage/www-client/firefox-136.0/work/firefox_build/dist/bin  ../../../build/pure_virtual/libpure_virtual.a ../../../dist/bin/libgkcodecs.so ../../../dist/bin/libmozavutil.so -Wl,--version-script,libmozavcodec.so.symbols  -ldl -ldav1d -lvpx -lm
 9:22.13 ld.lld: error: undefined symbol: aom_codec_av1_cx
 9:22.13 >>> referenced by libaomenc.c
 9:22.13 >>>               libaomenc.o:(av1_init)
 9:22.13 >>> referenced by libaomenc.c
 9:22.13 >>>               libaomenc.o:(av1_get_supported_config)
 9:22.14 ld.lld: error: undefined symbol: aom_img_remove_metadata
 9:22.14 >>> referenced by libaomenc.c
 9:22.14 >>>               libaomenc.o:(aom_encode)
 9:22.14 >>> referenced by libaomenc.c
 9:22.14 >>>               libaomenc.o:(aom_free)
 9:22.14 ld.lld: error: undefined symbol: aom_img_add_metadata
 9:22.14 >>> referenced by libaomenc.c
 9:22.14 >>>               libaomenc.o:(aom_encode)
 9:22.14 ld.lld: error: undefined symbol: aom_codec_control
 9:22.14 >>> referenced by libaomenc.c
 9:22.14 >>>               libaomenc.o:(aom_encode)
 9:22.14 >>> referenced by libaomenc.c
 9:22.14 >>>               libaomenc.o:(codecctl_int)
 9:22.14 >>> referenced by libaomenc.c
 9:22.14 >>>               libaomenc.o:(codecctl_svcp)
 9:22.14 >>> referenced 2 more times
 9:22.15 ld.lld: error: undefined symbol: aom_codec_encode
 9:22.15 >>> referenced by libaomenc.c
 9:22.15 >>>               libaomenc.o:(aom_encode)
 9:22.15 ld.lld: error: undefined symbol: aom_codec_get_cx_data
 9:22.15 >>> referenced by libaomenc.c
 9:22.15 >>>               libaomenc.o:(aom_encode)
 9:22.15 >>> referenced by libaomenc.c
 9:22.15 >>>               libaomenc.o:(aom_encode)
 9:22.15 ld.lld: error: undefined symbol: aom_codec_destroy
 9:22.15 >>> referenced by libaomenc.c
 9:22.15 >>>               libaomenc.o:(aom_free)
 9:22.15 ld.lld: error: undefined symbol: aom_codec_version
 9:22.15 >>> referenced by libaomenc.c
 9:22.15 >>>               libaomenc.o:(av1_get_supported_config)
 9:22.15 ld.lld: error: undefined symbol: aom_codec_get_caps
 9:22.15 >>> referenced by libaomenc.c
 9:22.15 >>>               libaomenc.o:(av1_get_supported_config)
 9:22.15 >>> referenced by libaomenc.c
 9:22.15 >>>               libaomenc.o:(aom_init)
 9:22.15 ld.lld: error: undefined symbol: aom_codec_version_str
 9:22.15 >>> referenced by libaomenc.c
 9:22.15 >>>               libaomenc.o:(aom_init)
 9:22.15 ld.lld: error: undefined symbol: aom_codec_build_config
 9:22.16 >>> referenced by libaomenc.c
 9:22.16 >>>               libaomenc.o:(aom_init)
 9:22.16 ld.lld: error: undefined symbol: aom_codec_enc_config_default
 9:22.16 >>> referenced by libaomenc.c
 9:22.16 >>>               libaomenc.o:(aom_init)
 9:22.16 ld.lld: error: undefined symbol: aom_codec_err_to_string
 9:22.16 >>> referenced by libaomenc.c
 9:22.16 >>>               libaomenc.o:(aom_init)
 9:22.16 ld.lld: error: undefined symbol: aom_codec_enc_init_ver
 9:22.16 >>> referenced by libaomenc.c
 9:22.16 >>>               libaomenc.o:(aom_init)
 9:22.16 ld.lld: error: undefined symbol: aom_codec_set_option
 9:22.16 >>> referenced by libaomenc.c
 9:22.16 >>>               libaomenc.o:(aom_init)
 9:22.16 ld.lld: error: undefined symbol: aom_img_wrap
 9:22.16 >>> referenced by libaomenc.c
 9:22.16 >>>               libaomenc.o:(aom_init)
 9:22.16 ld.lld: error: undefined symbol: aom_codec_error
 9:22.17 >>> referenced by libaomenc.c
 9:22.17 >>>               libaomenc.o:(log_encoder_error)
 9:22.17 ld.lld: error: undefined symbol: aom_codec_error_detail
 9:22.17 >>> referenced by libaomenc.c
 9:22.17 >>>               libaomenc.o:(log_encoder_error)
 9:22.17 x86_64-pc-linux-gnu-clang++-19: error: linker command failed with exit code 1 (use -v to see invocation)
 9:22.17 gmake[4]: *** [/var/tmp/portage/www-client/firefox-136.0/work/firefox-136.0/config/rules.mk:539: ../../../dist/bin/libmozavcodec.so] Error 1
 9:22.17 gmake[4]: Leaving directory '/var/tmp/portage/www-client/firefox-136.0/work/firefox_build/media/ffvpx/libavcodec'
 9:22.17 gmake[3]: *** [/var/tmp/portage/www-client/firefox-136.0/work/firefox-136.0/config/recurse.mk:72: media/ffvpx/libavcodec/target] Error 2
 9:22.17 gmake[3]: *** Waiting for unfinished jobs....

Find the full build.log attached.

Expected results:

Build should succeed. If I manually add -laom to my LDFLAGS then the build passes and produces a working Firefox browser.

Note that when using bundled av1 there's no need to pass external LDFLAGS to the build environment.

The Bugbug bot thinks this bug should belong to the 'Firefox Build System::General' component, and is moving the bug to that component. Please correct in case you think the bot is wrong.

Component: Untriaged → General
Product: Firefox → Firefox Build System
Severity: -- → S4

Joonas, can you check if the attached patch fixes your issue?

Hey,

unfortunately no. Seems to error out in the same place and same error:

 * Applying user patches from /etc/portage/patches ...
 * Applying bmo-1951581-add-missing-system-av1-includes.patch ...
 [ ok ]
 * User patches applied.
 8:54.91 ld.lld: error: undefined symbol: aom_codec_av1_cx
 8:54.91 >>> referenced by libaomenc.c
 8:54.91 >>>               libaomenc.o:(av1_init)
 8:54.91 >>> referenced by libaomenc.c
 8:54.91 >>>               libaomenc.o:(av1_get_supported_config)
 8:54.92 ld.lld: error: undefined symbol: aom_img_remove_metadata
 8:54.92 >>> referenced by libaomenc.c
 8:54.92 >>>               libaomenc.o:(aom_encode)
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(aom_free)
 8:54.93 ld.lld: error: undefined symbol: aom_img_add_metadata
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(aom_encode)
 8:54.93 ld.lld: error: undefined symbol: aom_codec_control
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(aom_encode)
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(codecctl_int)
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(codecctl_svcp)
 8:54.93 >>> referenced 2 more times
 8:54.93 ld.lld: error: undefined symbol: aom_codec_encode
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(aom_encode)
 8:54.93 ld.lld: error: undefined symbol: aom_codec_get_cx_data
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(aom_encode)
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(aom_encode)
 8:54.93 ld.lld: error: undefined symbol: aom_codec_destroy
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(aom_free)
 8:54.93 ld.lld: error: undefined symbol: aom_codec_version
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(av1_get_supported_config)
 8:54.93 ld.lld: error: undefined symbol: aom_codec_get_caps
 8:54.93 >>> referenced by libaomenc.c
 8:54.93 >>>               libaomenc.o:(av1_get_supported_config)
 8:54.93 >>> referenced by libaomenc.c
 8:54.94 >>>               libaomenc.o:(aom_init)
 8:54.94 ld.lld: error: undefined symbol: aom_codec_version_str
 8:54.94 >>> referenced by libaomenc.c
 8:54.94 >>>               libaomenc.o:(aom_init)
 8:54.94 ld.lld: error: undefined symbol: aom_codec_build_config
 8:54.94 >>> referenced by libaomenc.c
 8:54.94 >>>               libaomenc.o:(aom_init)
 8:54.94 ld.lld: error: undefined symbol: aom_codec_enc_config_default
 8:54.94 >>> referenced by libaomenc.c
 8:54.94 >>>               libaomenc.o:(aom_init)
 8:54.94 ld.lld: error: undefined symbol: aom_codec_err_to_string
 8:54.94 >>> referenced by libaomenc.c
 8:54.94 >>>               libaomenc.o:(aom_init)
 8:54.94 ld.lld: error: undefined symbol: aom_codec_enc_init_ver
 8:54.94 >>> referenced by libaomenc.c
 8:54.94 >>>               libaomenc.o:(aom_init)
 8:54.94 ld.lld: error: undefined symbol: aom_codec_set_option
 8:54.94 >>> referenced by libaomenc.c
 8:54.94 >>>               libaomenc.o:(aom_init)
 8:54.94 ld.lld: error: undefined symbol: aom_img_wrap
 8:54.94 >>> referenced by libaomenc.c
 8:54.94 >>>               libaomenc.o:(aom_init)
 8:54.95 ld.lld: error: undefined symbol: aom_codec_error
 8:54.95 >>> referenced by libaomenc.c
 8:54.95 >>>               libaomenc.o:(log_encoder_error)
 8:54.95 ld.lld: error: undefined symbol: aom_codec_error_detail
 8:54.95 >>> referenced by libaomenc.c
 8:54.95 >>>               libaomenc.o:(log_encoder_error)
 8:54.95 x86_64-pc-linux-gnu-clang++-19: error: linker command failed with exit code 1 (use -v to see invocation)
 8:54.95 gmake[4]: *** [/var/tmp/portage/www-client/firefox-136.0/work/firefox-136.0/config/rules.mk:539: ../../../dist/bin/libmozavcodec.so] Error 1
 8:54.95 gmake[4]: Leaving directory '/var/tmp/portage/www-client/firefox-136.0/work/firefox_build/media/ffvpx/libavcodec'
 8:54.95 gmake[3]: *** [/var/tmp/portage/www-client/firefox-136.0/work/firefox-136.0/config/recurse.mk:72: media/ffvpx/libavcodec/target] Error 2
 8:54.95 gmake[3]: *** Waiting for unfinished jobs....
Duplicate of this bug: 1951965

mmmh can you share the config.status?

Of course! Attached.

cat /usr/lib64/pkgconfig/aom.pc
# libaom pkg-config.
prefix=/usr
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib64

Name: aom
Description: Alliance for Open Media AV1 codec library v3.10.0.
Version: 3.10.0
Requires:
Conflicts:
Libs: -L${libdir} -laom
Libs.private: -lm
Cflags: -I${includedir}

Thanks, patch updated, it should work now

Assignee: nobody → sguelton
Attachment #9469711 - Attachment description: WIP: Bug 1951581 - Add missing OS_LIBS when using system libav1 r=glandium → Bug 1951581 - Add missing flags when using system libav1 r=glandium!
Status: UNCONFIRMED → ASSIGNED
Ever confirmed: true

Thank you! The current revision indeed makes it build.

$ grep aom /var/db/pkg/www-client/firefox-136.0/NEEDED
/usr/lib64/firefox/libxul.so libmozsandbox.so,libgkcodecs.so,liblgpllibs.so,libmozsqlite3.so,libmozgtk.so,libmozwayland.so,libicui18n.so.76,libicuuc.so.76,libgraphite2.so.3,libaom.so.3,libdav1d.so.7,libX11.so.6,libXcomposite.so.1,libXdamage.so.1,libXext.so.6,libXfixes.so.3,libXrandr.so.2,libasound.so.2,libc.so.6,ld-linux-x86-64.so.2,libffi.so.8,libplc4.so,libnspr4.so,libz.so.1,libm.so.6,libssl3.so,libsmime3.so,libnss3.so,libnssutil3.so,libfreetype.so.6,libfontconfig.so.1,libgtk-3.so.0,libgdk-3.so.0,libpango-1.0.so.0,libharfbuzz.so.0,libatk-1.0.so.0,libcairo-gobject.so.2,libcairo.so.2,libgdk_pixbuf-2.0.so.0,libgio-2.0.so.0,libgobject-2.0.so.0,libglib-2.0.so.0,libjpeg.so.62,libwebp.so.7,libwebpdemux.so.2,libevent-2.1.so.7,libvpx.so.9,libpixman-1.so.0,libdbus-1.so.3,libxcb-shm.so.0,libX11-xcb.so.1,libxcb.so.1,libstdc++.so.6,libgcc_s.so.1
/usr/lib64/firefox/libmozavcodec.so libgkcodecs.so,libmozavutil.so,libdav1d.so.7,libaom.so.3,libvpx.so.9,libm.so.6,libc.so.6

Pushed by sguelton@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/5134f15c4d35 Add missing flags when using system libav1 r=media-playback-reviewers,padenot
Status: ASSIGNED → RESOLVED
Closed: 13 days ago
Resolution: --- → FIXED
Target Milestone: --- → 138 Branch
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: