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?

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.

Cheers,

Richard
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#227731): 
https://lists.openembedded.org/g/openembedded-core/message/227731
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]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to