On 12/15/25 20:00, Richard Purdie wrote:
CAUTION: This email comes from a non Wind River email account!
Do not click links or open attachments unless you recognize the sender and know
the content is safe.
On Fri, 2025-10-10 at 15:52 +0800, hongxu via lists.openembedded.org wrote:
In bitbake.conf, use ??= to set *_OPTIMIZATION, add a new include
file debug_build.inc to use ?= to override *_OPTIMIZATION when
DEBUG_BUILD is enabled
When DEBUG_BUILD is enabled:
- Defer inherit bblcass debug_build, while setting DEBUG_BUILD = "1" in
local.conf, the debug build is enabled globally. For the recipe (such
as qemu) which doesn't work without optimization, set DEBUG_BUILD = "0"
to disable it for a given recipe
- Use include_all to allow other layers to add their own debug build
configurations
Suggested-by: Peter Kjellerstedt<[email protected]>
Signed-off-by: Hongxu Jia<[email protected]>
---
meta/classes-global/base.bbclass | 3 +++
meta/classes-recipe/debug_build.bbclass | 8 ++++++++
meta/conf/bitbake.conf | 9 +++------
meta/conf/distro/include/debug_build.inc | 5 +++++
meta/conf/documentation.conf | 2 +-
5 files changed, 20 insertions(+), 7 deletions(-)
create mode 100644 meta/classes-recipe/debug_build.bbclass
create mode 100644 meta/conf/distro/include/debug_build.inc
diff --git a/meta/classes-global/base.bbclass b/meta/classes-global/base.bbclass
index 6de17d1bb5..0f4398e26f 100644
--- a/meta/classes-global/base.bbclass
+++ b/meta/classes-global/base.bbclass
@@ -35,6 +35,9 @@ TOOLCHAIN_NATIVE ??= "${PREFERRED_TOOLCHAIN_NATIVE}"
inherit_defer toolchain/${TOOLCHAIN_NATIVE}-native
inherit_defer toolchain/${TOOLCHAIN}
+DEBUG_BUILD ??= "0"
+inherit_defer ${@oe.utils.vartrue('DEBUG_BUILD', 'debug_build', '', d)}
+
def lsb_distro_identifier(d):
adjust = d.getVar('LSB_DISTRO_ADJUST')
adjust_func = None
diff --git a/meta/classes-recipe/debug_build.bbclass
b/meta/classes-recipe/debug_build.bbclass
new file mode 100644
index 0000000000..a917e9cbc9
--- /dev/null
+++ b/meta/classes-recipe/debug_build.bbclass
@@ -0,0 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Allow other layers to add their own debug build configurations
+include_all conf/distro/include/debug_build.inc
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 5406e542db..52ceb76bbb 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -658,13 +658,10 @@ DEBUG_PREFIX_MAP ?= "\
"
DEBUG_LEVELFLAG ?= "-g"
-FULL_OPTIMIZATION = "-O2 ${DEBUG_LEVELFLAG}"
-DEBUG_OPTIMIZATION = "-Og ${DEBUG_LEVELFLAG}"
-SELECTED_OPTIMIZATION ="${@d.getVar(oe.utils.vartrue('DEBUG_BUILD', 'DEBUG_OPTIMIZATION',
'FULL_OPTIMIZATION', d))}"
-SELECTED_OPTIMIZATION[vardeps] += "FULL_OPTIMIZATION DEBUG_OPTIMIZATION
DEBUG_BUILD"
+FULL_OPTIMIZATION ??= "-O2 ${DEBUG_LEVELFLAG}"
+SELECTED_OPTIMIZATION ??= "${FULL_OPTIMIZATION}"
# compiler flags for native/nativesdk
-BUILD_OPTIMIZATION ="${@oe.utils.vartrue('DEBUG_BUILD', '-Og -g', '-O2', d)}"
-BUILD_OPTIMIZATION[vardeps] += "DEBUG_BUILD"
+BUILD_OPTIMIZATION ??= "-O2"
##################################################################
# Reproducibility
diff --git a/meta/conf/distro/include/debug_build.inc
b/meta/conf/distro/include/debug_build.inc
new file mode 100644
index 0000000000..95e09e64f5
--- /dev/null
+++ b/meta/conf/distro/include/debug_build.inc
@@ -0,0 +1,5 @@
+# Override SELECTED_OPTIMIZATION and BUILD_OPTIMIZATION when DEBUG_BUILD is
enabled.
+DEBUG_OPTIMIZATION ?= "-Og ${DEBUG_LEVELFLAG}"
+SELECTED_OPTIMIZATION ?= "${DEBUG_OPTIMIZATION}"
+# compiler flags for native/nativesdk
+BUILD_OPTIMIZATION ?= "-Og -g"
diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
index 741130a392..2a7418ccb3 100644
--- a/meta/conf/documentation.conf
+++ b/meta/conf/documentation.conf
@@ -129,7 +129,7 @@ CVE_CHECK_LAYER_INCLUDELIST[doc] = "Defines which layers to
include during cve-c
D[doc] = "The destination directory."
DATE[doc] = "The date the build was started using YMD format."
DATETIME[doc] = "The date and time the build was started."
-DEBUG_BUILD[doc] = "Specifies to build packages with debugging information. This
influences the value of the SELECTED_OPTIMIZATION variable."
+DEBUG_BUILD[doc] = "Specifies to build packages with debugging information. This
influences the value of the SELECTED_OPTIMIZATION variable and includes file
conf/distro/include/debug_build.inc"
DEBUG_OPTIMIZATION[doc] = "The options to pass in TARGET_CFLAGS and CFLAGS when
compiling a system for debugging. This variable defaults to '-Og
${DEBUG_LEVELFLAG}'."
DEFAULT_PREFERENCE[doc] = "Specifies a weak bias for recipe selection
priority."
DEPENDS[doc] = "Lists a recipe's build-time dependencies (i.e. other recipe
files)."
Sorry about the delay in getting to this, we had to focus on the
release. I have been giving this some thought and it is heading the
right way but I have a couple of ideas.
The problem with DEBUG_BUILD is that we have a lot of debug information
in builds anyway and this is now unclear what it means. The
documentation.conf entry mentions packages which is now incorrect too.
The variable is a very old one and the interface is poorly designed
compared to other areas now.
Rather than keeping "DEBUG_BUILD" alive, perhaps we drop that and
simply document the INHERIT instead? I did wonder about making it a
config fragment instead too instead of a class?
Got it, I will try to drop DEBUG_BUILD and add a config fragment to instead
I'm also wondering whether we should remove SELECTED_OPTIMIZATION
entirely? Certainly DEBUG_OPTIMIZATION and FULL_OPTIMIZATION can be
dropped. Whether that should be this patch or another, I don't mind.
It is not easy to remove *_OPTIMIZATION, especially SELECTED_OPTIMIZATION,
with a simple grep,
...
$ grep SELECTED_OPTIMIZATION -rn meta
meta/recipes-kernel/perf/perf.bb:88:TARGET_CC_ARCH +=
"${SELECTED_OPTIMIZATION} ${DEBUG_PREFIX_MAP}"
meta/recipes-kernel/systemtap/systemtap_git.inc:18: if
bb.utils.contains("SELECTED_OPTIMIZATION", "-O0", "x", "", d) == "x":
meta/conf/templates/default/local.conf.sample.extended:101:#
SELECTED_OPTIMIZATION = "${PROFILE_OPTIMIZATION}" grep:
meta/conf/.documentation.conf.swp: binary file matches
meta/conf/distro/include/lto.inc:48:SELECTED_OPTIMIZATION:append =
"${@bb.utils.contains('DISTRO_FEATURES', 'lto', ' ${LTO}', '', d)}"
meta/conf/distro/include/lto.inc:51:SELECTED_OPTIMIZATION[vardeps] +=
"LTO LTOEXTRA" meta/conf/distro/include/security_flags.inc:13:OPTLEVEL =
"${@bb.utils.filter('SELECTED_OPTIMIZATION', '-O0 -O1 -O2 -O3 -Ofast -Og
-Os -Oz -O', d)}"
meta/conf/distro/include/security_flags.inc:64:TARGET_CC_ARCH:append:pn-binutils
= " ${SELECTED_OPTIMIZATION}"
meta/conf/distro/include/security_flags.inc:65:TARGET_CC_ARCH:append:pn-gcc
= " ${SELECTED_OPTIMIZATION}"
meta/conf/distro/include/security_flags.inc:66:TARGET_CC_ARCH:append:pn-gdb
= " ${SELECTED_OPTIMIZATION}" meta/conf/bitbake.conf:612:TARGET_CFLAGS =
"${TARGET_CPPFLAGS} ${SELECTED_OPTIMIZATION} ${DEBUG_PREFIX_MAP} -pipe"
meta/conf/bitbake.conf:663:SELECTED_OPTIMIZATION ??=
"${FULL_OPTIMIZATION}"
meta/recipes-support/xxhash/xxhash_0.8.3.bb:15:CFLAGS +=
"${@bb.utils.contains('SELECTED_OPTIMIZATION', '-Og',
'-DXXH_NO_INLINE_HINTS', '', d)}"
meta/recipes-devtools/valgrind/valgrind_3.26.0.bb:70:SELECTED_OPTIMIZATION
= "${DEBUG_LEVELFLAG}"
...
Variable TARGET_CC_ARCH need to append ${SELECTED_OPTIMIZATION}
conditionally
It is possible to remove DEBUG_OPTIMIZATION and FULL_OPTIMIZATION, I
will try it in other thread out of these serials
//Hongxu
Cheers,
Richard
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#227926):
https://lists.openembedded.org/g/openembedded-core/message/227926
Mute This Topic: https://lists.openembedded.org/mt/115685783/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-