From 3e9d7c06da45ca1bcb7d65df0fbf3d7ed80c1ce3 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Tue, 25 Mar 2025 01:04:09 -0700 Subject: [PATCH] gn: Compute is_clang correctly is_clang is hardcoded to 'false' which works great when using gcc compiler, however it does not work when using clang compiler with yocto from meta-clang, since toolchain file encodes is_clang = false but then uses clang for cc/cxx lot of GN checks in chromium go wrong due to is_clang assuming wrong value and compilation fails e.g. | CMake Error at /home/khem/actions-runner-yoe/_work/yoe-distro/yoe-distro/build/tmp/work/cortexa57-yoe-linux/qtwebengine/6.9.0/git/cmake/QtGnGen.cmake:95 (message): | | | -- GN FAILED | | ERROR at | //base/allocator/partition_allocator/src/partition_alloc/BUILD.gn:499:7 | (//build/toolchain/yocto:yocto_native): Assertion failed. | | assert(stack_scan_supported) | ^----- | | See //base/allocator/partition_allocator/BUILD.gn:7:19: which caused the | file to be included. | | public_deps = [ "src/partition_alloc:raw_ptr" ] | ^---------------------------- | Therefore, compute this flag based upon toolchains used to compile QT in yocto environment. Pick-to: 6.9 Change-Id: I42d3fc77d7241d842e3fbbc991ee5cdcfc39f46f Reviewed-by: Samuli Piippo --- recipes-qt/qt6/gn-utils.inc | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/recipes-qt/qt6/gn-utils.inc b/recipes-qt/qt6/gn-utils.inc index 6588a5f..df88bbd 100644 --- a/recipes-qt/qt6/gn-utils.inc +++ b/recipes-qt/qt6/gn-utils.inc @@ -50,6 +50,20 @@ def gn_host_pkg_config(d): """Return absolute paths to pkg-config-native.""" return d.getVar("STAGING_BINDIR_NATIVE") + "/" + "pkg-config-native" +def gn_clang(d): + """Return true if using clang compiler else return false""" + if "clang++" in d.getVar("CXX"): + return "true" + else: + return "false" + +def gn_clang_native(d): + """Return true if using native clang compiler else return false""" + if "clang++" in d.getVar("BUILD_CXX"): + return "true" + else: + return "false" + def write_toolchain_file(d, file_path): """Creates a complete GN toolchain file in |file_path|.""" import string @@ -72,7 +86,7 @@ def write_toolchain_file(d, file_path): ' toolchain_args = {\n' ' current_cpu = "${current_cpu}"\n' ' current_os = "linux"\n' - ' is_clang = false\n' + ' is_clang = ${is_clang}\n' ' host_pkg_config = "${host_pkg_config}"\n' ' }\n' '}\n' @@ -80,6 +94,7 @@ def write_toolchain_file(d, file_path): native_toolchain = { 'toolchain_name': 'yocto_native', + 'is_clang': gn_clang_native(d), 'current_cpu': gn_host_arch_name(d), 'host_pkg_config': gn_host_pkg_config(d), 'cc': d.expand('${BUILD_CC}'), @@ -94,6 +109,7 @@ def write_toolchain_file(d, file_path): } target_toolchain = { 'toolchain_name': 'yocto_target', + 'is_clang': gn_clang(d), 'current_cpu': gn_target_arch_name(d), 'host_pkg_config': gn_host_pkg_config(d), 'cc': d.expand('${CC}'),