@@ -22,30 +22,13 @@ SRC_URI += "\
22
22
file://0005-avoid-link-latomic-failure-on-CentOS-8-host.patch \
23
23
file://0006-Don-t-pass-unknown-LLVM-options.patch \
24
24
file://0007-Fix-constexpr-variable-must-be-initialized-by-a-cons.patch \
25
- file://0008-Use-the-correct-path-to-libclang_rt.builtins.a.patch \
26
25
file://0009-Adjust-the-Rust-build-to-our-needs.patch \
27
26
file://0010-Don-t-require-profiler_builtins.rlib.patch \
28
- file://0011-Revert-Allow-and-use-std-hardware_destructive_interf.patch \
29
- file://0012-Revert-Set-Rust-symbol-visibility-to-hidden-when-C-s.patch \
30
- file://0013-pdfium-Fix-missing-PDFiumAPIStringBufferAdapter-temp.patch \
31
- file://0014-Revert-Remove-libavif-based-AVIF-decoder.patch \
32
- file://0015-Revert-Remove-third_party-libavif.patch \
33
- file://0016-Disable-crabbyavif-to-fix-build-errors.patch \
34
- file://0017-rust-Use-adler-instead-of-adler2.patch \
35
- file://0018-third_party-node-update_node_binaries-Update-nodejs-.patch \
36
- file://0019-Reduce-minimum-browser-window-width-to-480px.patch \
37
- file://0020-rust-filter-out-arm-specific-flags-from-rust-compile.patch \
38
- file://0021-chromium-fix-v4l2-compiler-error-on-arm.patch \
27
+ file://0011-fix-check_version-Only-compare-node.js-major-version.patch \
28
+ file://0012-chromium-fix-v4l2-compiler-error-on-arm.patch \
29
+ file://23d818d3c7fba4658248f17fd7b8993199242aa9.patch \
39
30
"
40
31
41
- # Missing third_party sources.
42
- SRC_URI += "\
43
- git://chromium.googlesource.com/external/github.com/AOMediaCodec/libavif;protocol=https;branch=main;name=libavif;destsuffix=third_party/libavif/src \
44
- "
45
-
46
- SRCREV_FORMAT .= "_libavif"
47
- SRCREV_libavif = "e7b34a1f5e9f7024d08311c7bae156061b889882"
48
-
49
32
# ARM/AArch64-specific patches.
50
33
SRC_URI :append :aarch64 = "${@ bb . utils . contains ('TUNE_FEATURES' , 'crypto' , '' , ' file://arm/0001-Fix-AES-crypto-SIGILL-on-rpi4-64.patch' , d )}"
51
34
@@ -92,6 +75,7 @@ DEPENDS += " \
92
75
libwebp \
93
76
libxkbcommon \
94
77
libxslt \
78
+ lld-native \
95
79
ninja-native \
96
80
nodejs-native \
97
81
nspr \
@@ -106,7 +90,7 @@ DEPENDS += " \
106
90
rust-native \
107
91
virtual/libgl \
108
92
"
109
- DEPENDS :append : runtime - llvm = " compiler-rt compiler-rt-native libcxx-native"
93
+ DEPENDS :append = " compiler-rt compiler-rt-native libcxx-native"
110
94
DEPENDS :append :libc -musl = " libexecinfo"
111
95
112
96
LDFLAGS :append :libc -musl = " -lexecinfo"
@@ -139,10 +123,10 @@ PACKAGECONFIG[use-egl] = ",,virtual/egl virtual/libgles2"
139
123
# be necessary but are OK to add).
140
124
PACKAGECONFIG [component -build ] = ""
141
125
142
- # Starting with M61, Chromium defaults to building with its own copy of libc++
143
- # instead of the system's libstdc++. Add a knob to control this behavior
144
- # https://groups.google.com/a/chromium.org/d/msg/chromium-packagers/8aYO3me2SCE/SZ8pJXhZAwAJ
145
- PACKAGECONFIG [ custom - libcxx ] = "use_custom_libcxx=true,use_custom_libcxx=false,, "
126
+ # As of Chromium 138, libc++ is required unconditionally.
127
+ # https://docs.google.com/document/d/193ig0qeM23rK1yH6bW14O3zIgVztyKaY4R1XRwgmUFk/edit?usp=sharing
128
+ # Force use_custom_libcxx=true as Chromium 138+ requires libc++
129
+ GN_ARGS + = "use_custom_libcxx=true"
146
130
147
131
PACKAGECONFIG [cups ] = "use_cups=true,use_cups=false,cups"
148
132
PACKAGECONFIG [gtk4 ] = ""
@@ -281,6 +265,10 @@ GN_ARGS += "disable_fieldtrial_testing_config=true"
281
265
# See https://crrev.com/c/2424669
282
266
GN_ARGS += "chrome_pgo_phase=0"
283
267
268
+ # Disable passing --warning-suppression-mappings= flag to clang.
269
+ # This feature is available on Clang21+
270
+ GN_ARGS += "clang_warning_suppression_file="""
271
+
284
272
# API keys for accessing Google services. By default, we use an invalid key
285
273
# only to prevent the "you are missing an API key" infobar from being shown on
286
274
# startup.
@@ -297,9 +285,12 @@ GN_ARGS += ' \
297
285
'
298
286
299
287
# Use libcxx headers for native parts
300
- BUILD_CPPFLAGS :append : runtime - llvm = " -isysroot=${STAGING_DIR_NATIVE} -stdlib=libc++"
288
+ BUILD_CPPFLAGS :append = " -isysroot=${STAGING_DIR_NATIVE} -stdlib=libc++"
301
289
# Use libgcc for native parts
302
- BUILD_LDFLAGS :append :runtime -llvm = " -rtlib=libgcc -unwindlib=libgcc -stdlib=libc++ -lc++abi -rpath ${STAGING_LIBDIR_NATIVE} "
290
+ BUILD_LDFLAGS :append = " -rtlib=libgcc -unwindlib=libgcc -stdlib=libc++ -lc++abi -rpath ${STAGING_LIBDIR_NATIVE} "
291
+ LDFLAGS :append = " --target=${TARGET_SYS} "
292
+ CXXFLAGS :append = " --target=${TARGET_SYS} -nostdlib++"
293
+ CFLAGS :append = " --target=${TARGET_SYS} "
303
294
304
295
# Toolchains we will use for the build. We need to point to the toolchain file
305
296
# we've created, set the right target architecture and make sure we are not
@@ -367,15 +358,16 @@ ARM_VERSION:armv6 = "6"
367
358
# overriding what GN wants
368
359
TUNE_CCARGS :remove = "-mthumb"
369
360
361
+ # Linking rust with partitionalloc is problematic in arm32
370
362
GN_ARGS :append :arm = ' \
371
363
arm_float_abi="${ARM_FLOAT_ABI} " \
372
364
arm_fpu="${ARM_FPU} " \
373
365
arm_tune="${ARM_TUNE} " \
374
366
arm_version=${ARM_VERSION} \
367
+ use_partition_alloc_as_malloc=false \
368
+ enable_backup_ref_ptr_support=false \
375
369
'
376
- # tcmalloc's atomicops-internals-arm-v6plus.h uses the "dmb" instruction that
377
- # is not available on (some?) ARMv6 models, which causes the build to fail.
378
- GN_ARGS :append :armv6 = ' use_partition_alloc_as_malloc=false enable_backup_ref_ptr_support=false'
370
+
379
371
# The WebRTC code fails to build on ARMv6 when NEON is enabled.
380
372
# https://bugs.chromium.org/p/webrtc/issues/detail?id=6574
381
373
GN_ARGS :append :armv6 = ' arm_use_neon=false'
@@ -447,6 +439,7 @@ python do_write_toolchain_file () {
447
439
toolchain_file = os . path . join (toolchain_dir , "BUILD.gn" )
448
440
write_toolchain_file (d , toolchain_file )
449
441
}
442
+
450
443
addtask write_toolchain_file after do_patch before do_configure
451
444
452
445
do_add_nodejs_symlink () {
@@ -468,29 +461,39 @@ do_add_clang_latest () {
468
461
# directory that is a copy of /usr/lib/clang/$CLANG_VERSION. Chromium
469
462
# manually links against libclang_rt.builtins.a and uses the `clang_version`
470
463
# GN variable to find it. This allows us to set it to the same value for all
471
- # Yocto releases.
464
+ # Yocto releases. Also copy headers so bindgen can find system headers.
472
465
cd "${STAGING_LIBDIR_NATIVE} /clang"
473
466
rm -rf latest
474
- # find the directory containing the library
467
+
468
+ # Find a directory with runtime libraries and copy it as base
475
469
for dir in *; do
476
- if [ -n "$(find $dir -name 'libclang_rt.builtins*')" ] ; then
470
+ if [ -d "$dir" ] && [ -n "$(find $dir -name 'libclang_rt.builtins*' 2>/dev/null)" ]; then
471
+ echo "Copying clang directory $dir to latest (runtime libraries)"
477
472
cp -r "$dir" latest
478
473
break
479
474
fi
480
475
done
476
+
477
+ # Find and copy headers from any versioned directory to ensure bindgen can find them
478
+ headers_copied = false
479
+ for dir in *; do
480
+ if [ -d "$dir/include" ]; then
481
+ echo "Found headers in $dir/include, copying to latest/include"
482
+ mkdir -p latest /include
483
+ cp -r "$dir/include/" * latest /include /
484
+ headers_copied = true
485
+ break
486
+ fi
487
+ done
488
+
489
+ if [ "$headers_copied" = false ]; then
490
+ echo "Warning: No Clang headers found in any versioned directories"
491
+ fi
481
492
}
482
493
addtask add_clang_latest after do_configure before do_compile
483
494
484
495
do_copy_clang_library () {
485
- # Chromium needs to link against libclang_rt.builtins.a for both host and
486
- # target code, and expects to find both libraries in the same directory
487
- # (thanks to 0008-Use-the-correct-path-to-libclang_rt.builtins.a.patch).
488
- cd "${STAGING_DIR_HOST}${nonarch_libdir} /clang"
489
- # lib_file = "./$CLANG_VERSION/lib/linux/libclang_rt.builtins-$ARCH.a"
490
- lib_file = "$(find . -name 'libclang_rt.builtins*')"
491
- # stripped_lib_file = "lib/linux/libclang_rt.builtins-$ARCH.a"
492
- stripped_lib_file = "${lib_file#*/*/} "
493
- cp "$lib_file" "${STAGING_LIBDIR_NATIVE} /clang/latest/${stripped_lib_file} "
496
+ cp -r ${STAGING_LIBDIR_NATIVE} /clang /latest ${STAGING_DIR_HOST}${nonarch_libdir} /clang /
494
497
}
495
498
addtask copy_clang_library after do_add_clang_latest before do_compile
496
499
@@ -502,15 +505,15 @@ do_copy_target_rustlibs () {
502
505
}
503
506
addtask copy_target_rustlibs after do_configure before do_compile
504
507
505
- do_copy_missing_third_party_sources () {
506
- rm -rf ${S} /third_party /libavif /src
507
- cp -r ${UNPACKDIR} /third_party /libavif /src / ${S} /third_party /libavif /
508
- }
509
- addtask copy_missing_third_party_sources after do_patch before do_configure
510
-
511
508
do_configure () {
512
509
cd ${S}
513
510
python3 . /build /linux /unbundle /replace_gn_files . py --system -libraries ${GN_UNBUNDLE_LIBS}
511
+
512
+ # Add Rust-style target triples (converted by Yocto's rust-common.bbclass)
513
+ grep -qxF "${RUST_TARGET_SYS} " ${S} /build /rust /known -target -triples . txt || echo "${RUST_TARGET_SYS} " >> ${S} /build /rust /known -target -triples . txt
514
+ grep -qxF "${RUST_HOST_SYS} " ${S} /build /rust /known -target -triples . txt || echo "${RUST_HOST_SYS} " >> ${S} /build /rust /known -target -triples . txt
515
+ grep -qxF "${RUST_BUILD_SYS} " ${S} /build /rust /known -target -triples . txt || echo "${RUST_BUILD_SYS} " >> ${S} /build /rust /known -target -triples . txt
516
+
514
517
gn gen --args = '${GN_ARGS} ' "${OUTPUT_DIR} "
515
518
}
516
519
@@ -627,4 +630,4 @@ ALLOW_EMPTY:${PN}-dev = "0"
627
630
628
631
# ERROR: QA Issue: lib32-chromium-ozone-wayland: ELF binary /usr/bin/chromium has relocations in .text [textrel]
629
632
INSANE_SKIP :${PN} :append :x86 = "textrel"
630
-
633
+ INSANE_SKIP : ${PN} - dbg : append = "buildpaths"
0 commit comments