Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Samuel Martin <s.martin49@gmail.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v4 1/9] package/pkg-cmake.mk: fix build type and optimization flags
Date: Sat, 15 Oct 2016 22:31:15 +0200	[thread overview]
Message-ID: <20161015203123.11241-2-s.martin49@gmail.com> (raw)
In-Reply-To: <20161015203123.11241-1-s.martin49@gmail.com>

tl;dr:

Before applying this patch, CMake packages are built with the following
options:
  * if BR2_ENABLE_DEBUG is set:
    The CMake build type is set to RelWithDebInfo, which means:
    - Optimization level is forced to: -O2;
    - no log nor assert due to -DNDEBUG;
    - BR2_DEBUG_{1..3} effect is unchanged;
  * otherwise:
    The CMake build type is set to Release, which means:
    - Optimization level is forced to: -O3;
    - no log nor assert due to -DNDEBUG (as expected).
  In any case, the optimization WRT the binary size is always ignored and
  forced.

This change chooses the build type doing the closest thing to what
Buildroot attempts to do.

Long version:

Flags set by Buildroot depending on the configuration:

  BR2_ENABLE_DEBUG | Optim. level   | Buildroot {C,CXX}FLAGS
  =================+================+=======================
          y        | BR2_OPTIMIZE_S | -Os -gx
          y        | BR2_OPTIMIZE_G | -Og -gx
          y        | BR2_OPTIMIZE_n | -On -gx
          n        | BR2_OPTIMIZE_S | -Os
          n        | BR2_OPTIMIZE_G | -Og
          n        | BR2_OPTIMIZE_n | -On

Default flags appended by CMake depending on the build type:

  Build type     | Flags           | Effects on {C,CXX}FLAGS
  ===============+=================+===========================================
  Debug          | -g              | Force -g, compatible with BR2_ENABLE_DEBUG
  MinSizeRel     | -Os -DNDEBUG    | Set -Os, compatible with BR2_OPTIMIZE_S
  Release        | -O3 -DNDEBUG    | Set -O3, closest to the others cases,
                 |                 | though the optimization level is forced.
  RelWithDebInfo | -O2 -g -DNDEBUG | Force -g and set -O2, not friendly with BR

Since CMake appends its own build type flags and because of the gcc
option parser, the CMake flags takes precedence over the Buildroot
flags.

So, this change sets the build type in a very simple way depending on
the BR2_ENABLE_DEBUG symbol.

Follow-up patches will fix the CMake flag variables that are appended by
CMake.

Cc: Charles Hardin <ckhardin@exablox.com>
Cc: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Maxime Hadjinlian <maxime.hadjinlian@gmail.com>

---
changes v3->v4:
- simplify build type selection
---
 package/pkg-cmake.mk | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/package/pkg-cmake.mk b/package/pkg-cmake.mk
index aca9e61..259865d 100644
--- a/package/pkg-cmake.mk
+++ b/package/pkg-cmake.mk
@@ -35,6 +35,14 @@ ifneq ($(QUIET),)
 CMAKE_QUIET = -DCMAKE_RULE_MESSAGES=OFF -DCMAKE_INSTALL_MESSAGE=NEVER
 endif
 
+# Set the CMake build type which matches the best the build configuration sets
+# in Buildroot.
+ifeq ($(BR2_ENABLE_DEBUG),y)
+BR_CMAKE_BUILD_TYPE=Debug
+else
+BR_CMAKE_BUILD_TYPE=Release
+endif
+
 ################################################################################
 # inner-cmake-package -- defines how the configuration, compilation and
 # installation of a CMake package should be done, implements a few hooks to
@@ -87,7 +95,7 @@ define $(2)_CONFIGURE_CMDS
 	PATH=$$(BR_PATH) \
 	$$($$(PKG)_CONF_ENV) $$(BR2_CMAKE) $$($$(PKG)_SRCDIR) \
 		-DCMAKE_TOOLCHAIN_FILE="$$(HOST_DIR)/usr/share/buildroot/toolchainfile.cmake" \
-		-DCMAKE_BUILD_TYPE=$$(if $$(BR2_ENABLE_DEBUG),RelWithDebInfo,Release) \
+		-DCMAKE_BUILD_TYPE=$(BR_CMAKE_BUILD_TYPE) \
 		-DCMAKE_INSTALL_PREFIX="/usr" \
 		-DCMAKE_COLOR_MAKEFILE=OFF \
 		-DBUILD_DOC=OFF \
-- 
2.10.0

  reply	other threads:[~2016-10-15 20:31 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
2016-10-15 20:31 ` Samuel Martin [this message]
2016-10-15 20:31 ` [Buildroot] [PATCH v4 2/9] package/pkg-cmake.mk: move CMAKE_BUILD_TYPE definition into toolchainfile.cmake Samuel Martin
2016-10-15 20:31 ` [Buildroot] [PATCH v4 3/9] toolchainfile.cmake: set per-config appended {C, CXX}FLAGS Samuel Martin
2016-10-15 20:31 ` [Buildroot] [PATCH v4 4/9] package/gflags: include TARGET_CXXFLAGS to the overloaded CXXFLAGS Samuel Martin
2016-10-15 20:31 ` [Buildroot] [PATCH v4 5/9] package/gnuradio: include TARGET_CFLAGS to the overloaded CFLAGS Samuel Martin
2016-10-15 20:31 ` [Buildroot] [PATCH v4 6/9] package/libcec: include TARGET_{C, CXX}FLAGS to the overloaded {C, CXX}FLAGS Samuel Martin
2016-10-15 20:31 ` [Buildroot] [PATCH v4 7/9] package/opencv3: fix CMAKE_CXX_FLAGS Samuel Martin
2016-10-15 20:31 ` [Buildroot] [PATCH v4 8/9] package/rpi-userland: include TARGET_CFLAGS to the overloaded CFLAGS Samuel Martin
2016-10-15 20:31 ` [Buildroot] [PATCH v4 9/9] toochainfile.cmake: rework the way Buildroot sets flags Samuel Martin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161015203123.11241-2-s.martin49@gmail.com \
    --to=s.martin49@gmail.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox