All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v4 0/9] Misc. CMake fixes
@ 2016-10-15 20:31 Samuel Martin
  2016-10-15 20:31 ` [Buildroot] [PATCH v4 1/9] package/pkg-cmake.mk: fix build type and optimization flags Samuel Martin
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Samuel Martin @ 2016-10-15 20:31 UTC (permalink / raw)
  To: buildroot

Hi all,

Here is a short series reworking the way the Buildroot's CMake
infrastructure handles compiler/linker flags.

Patch 1 to 3 fix the optimization and debug flags passed/set by CMake
through the toolchainfile.cmake file.

Patches 4 to 8 clean up CMake-based package regarding {C,CXX,LD}FLAGS.

Patch 9 reworks the way the compiler/linker flags are set in
toolchainfile.cmake.

Regards,
Sam


Max Filippov (1):
  package/opencv3: fix CMAKE_CXX_FLAGS

Samuel Martin (8):
  package/pkg-cmake.mk: fix build type and optimization flags
  package/pkg-cmake.mk: move CMAKE_BUILD_TYPE definition into
    toolchainfile.cmake
  toolchainfile.cmake: set per-config appended {C,CXX}FLAGS
  package/gflags: include TARGET_CXXFLAGS to the overloaded CXXFLAGS
  package/gnuradio: include TARGET_CFLAGS to the overloaded CFLAGS
  package/libcec: include TARGET_{C,CXX}FLAGS to the overloaded
    {C,CXX}FLAGS
  package/rpi-userland: include TARGET_CFLAGS to the overloaded CFLAGS
  toochainfile.cmake: rework the way Buildroot sets flags

 CHANGES                              |  9 +++++++++
 package/gflags/gflags.mk             |  3 ++-
 package/gnuradio/gnuradio.mk         |  2 +-
 package/libcec/libcec.mk             |  5 +++--
 package/opencv3/opencv3.mk           |  2 +-
 package/pkg-cmake.mk                 | 10 +++++++++-
 package/rpi-userland/rpi-userland.mk |  3 ++-
 support/misc/toolchainfile.cmake.in  | 32 ++++++++++++++++++++++++++++----
 8 files changed, 55 insertions(+), 11 deletions(-)

--
2.10.0

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH v4 1/9] package/pkg-cmake.mk: fix build type and optimization flags
  2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
@ 2016-10-15 20:31 ` Samuel Martin
  2016-10-15 20:31 ` [Buildroot] [PATCH v4 2/9] package/pkg-cmake.mk: move CMAKE_BUILD_TYPE definition into toolchainfile.cmake Samuel Martin
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Samuel Martin @ 2016-10-15 20:31 UTC (permalink / raw)
  To: buildroot

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

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH v4 2/9] package/pkg-cmake.mk: move CMAKE_BUILD_TYPE definition into toolchainfile.cmake
  2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
  2016-10-15 20:31 ` [Buildroot] [PATCH v4 1/9] package/pkg-cmake.mk: fix build type and optimization flags Samuel Martin
@ 2016-10-15 20:31 ` Samuel Martin
  2016-10-15 20:31 ` [Buildroot] [PATCH v4 3/9] toolchainfile.cmake: set per-config appended {C, CXX}FLAGS Samuel Martin
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Samuel Martin @ 2016-10-15 20:31 UTC (permalink / raw)
  To: buildroot

This change still allows overriding the build type from the configure
command line.

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

---
changes v3->v4:
- new patch
---
 CHANGES                             | 6 ++++++
 package/pkg-cmake.mk                | 2 +-
 support/misc/toolchainfile.cmake.in | 3 +++
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/CHANGES b/CHANGES
index b4bd5fe..c0e3e79 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,9 @@
+2016.11-rc1,
+
+    toolchainfile.cmake:
+    * when used outside of Buildroot, if not specified on the command
+      line, the CMAKE_BUILD_TYPE is by toolchainfile.cmake.
+
 2016.08, Released September 1st, 2016
 
 	Minor fixes.
diff --git a/package/pkg-cmake.mk b/package/pkg-cmake.mk
index 259865d..5725ed6 100644
--- a/package/pkg-cmake.mk
+++ b/package/pkg-cmake.mk
@@ -95,7 +95,6 @@ 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=$(BR_CMAKE_BUILD_TYPE) \
 		-DCMAKE_INSTALL_PREFIX="/usr" \
 		-DCMAKE_COLOR_MAKEFILE=OFF \
 		-DBUILD_DOC=OFF \
@@ -255,5 +254,6 @@ $(HOST_DIR)/usr/share/buildroot/toolchainfile.cmake:
 		-e 's#@@TARGET_FC@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_FC)))#' \
 		-e 's#@@CMAKE_SYSTEM_PROCESSOR@@#$(call qstrip,$(CMAKE_SYSTEM_PROCESSOR))#' \
 		-e 's#@@TOOLCHAIN_HAS_FORTRAN@@#$(if $(BR2_TOOLCHAIN_HAS_FORTRAN),1,0)#' \
+		-e 's#@@BR_CMAKE_BUILD_TYPE@@#$(BR_CMAKE_BUILD_TYPE)#' \
 		$(TOPDIR)/support/misc/toolchainfile.cmake.in \
 		> $@
diff --git a/support/misc/toolchainfile.cmake.in b/support/misc/toolchainfile.cmake.in
index 649b52d..b0a1cd9 100644
--- a/support/misc/toolchainfile.cmake.in
+++ b/support/misc/toolchainfile.cmake.in
@@ -13,6 +13,9 @@ string(REPLACE "/usr/share/buildroot" "" RELOCATED_HOST_DIR ${CMAKE_CURRENT_LIST
 set(CMAKE_SYSTEM_NAME Linux)
 set(CMAKE_SYSTEM_PROCESSOR @@CMAKE_SYSTEM_PROCESSOR@@)
 
+# Build type from the Buildroot configuration
+set(CMAKE_BUILD_TYPE @@BR_CMAKE_BUILD_TYPE@@ CACHE)
+
 set(CMAKE_C_FLAGS "@@TARGET_CFLAGS@@ ${CMAKE_C_FLAGS}" CACHE STRING "Buildroot CFLAGS")
 set(CMAKE_CXX_FLAGS "@@TARGET_CXXFLAGS@@ ${CMAKE_CXX_FLAGS}" CACHE STRING "Buildroot CXXFLAGS")
 set(CMAKE_EXE_LINKER_FLAGS "@@TARGET_LDFLAGS@@ ${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Buildroot LDFLAGS")
-- 
2.10.0

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH v4 3/9] toolchainfile.cmake: set per-config appended {C, CXX}FLAGS
  2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
  2016-10-15 20:31 ` [Buildroot] [PATCH v4 1/9] package/pkg-cmake.mk: fix build type and optimization flags Samuel Martin
  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 ` Samuel Martin
  2016-10-15 20:31 ` [Buildroot] [PATCH v4 4/9] package/gflags: include TARGET_CXXFLAGS to the overloaded CXXFLAGS Samuel Martin
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Samuel Martin @ 2016-10-15 20:31 UTC (permalink / raw)
  To: buildroot

The toolchainfile.cmake file already sets the build type to get close
to the Buildroot configuration.

This change sets the per-config compiler flags CMake appends, so CMake
does not mess up with the compilation flags Buildroot sets.

This change still allows overriding the these variables from the
configure command line.

Note:
  If a CMake-based project forces using a given build type and/or
  force the compiler and/or linker flag definitions (the default ones or
  the per-config ones - e.g. CMAKE_C_FLAGS/CMAKE_C_FLAGS_{DEBUG,RELEASE}),
  there is not much Buildroot can do about it.
  So, the flags will be overwritten anyway in these cases.

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

---
changes v3->v4:
- new patch
---
 support/misc/toolchainfile.cmake.in | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/support/misc/toolchainfile.cmake.in b/support/misc/toolchainfile.cmake.in
index b0a1cd9..fde141a 100644
--- a/support/misc/toolchainfile.cmake.in
+++ b/support/misc/toolchainfile.cmake.in
@@ -13,6 +13,18 @@ string(REPLACE "/usr/share/buildroot" "" RELOCATED_HOST_DIR ${CMAKE_CURRENT_LIST
 set(CMAKE_SYSTEM_NAME Linux)
 set(CMAKE_SYSTEM_PROCESSOR @@CMAKE_SYSTEM_PROCESSOR@@)
 
+# Give to CMake the {C,CXX}FLAGS to append in case the project's logic
+# falls back on a build type or another (i.e. set CMAKE_{C,CXX}_FLAGS_*
+# variables).
+#
+# Note:
+#   if the project forces some of these flag variables, Buildroot is
+#   screwed up and there is nothing Buildroot can do about that :(
+set(CMAKE_C_FLAGS_DEBUG "" CACHE)
+set(CMAKE_CXX_FLAGS_DEBUG "" CACHE)
+set(CMAKE_C_FLAGS_RELEASE " -DNEBUG" CACHE)
+set(CMAKE_CXX_FLAGS_RELEASE " -DNEBUG" CACHE)
+
 # Build type from the Buildroot configuration
 set(CMAKE_BUILD_TYPE @@BR_CMAKE_BUILD_TYPE@@ CACHE)
 
-- 
2.10.0

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH v4 4/9] package/gflags: include TARGET_CXXFLAGS to the overloaded CXXFLAGS
  2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
                   ` (2 preceding siblings ...)
  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 ` Samuel Martin
  2016-10-15 20:31 ` [Buildroot] [PATCH v4 5/9] package/gnuradio: include TARGET_CFLAGS to the overloaded CFLAGS Samuel Martin
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Samuel Martin @ 2016-10-15 20:31 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

---
changes v3->v4:
- fix commit subject
- update A/R/T tags

changes v2->v3:
- new patch
---
 package/gflags/gflags.mk | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/package/gflags/gflags.mk b/package/gflags/gflags.mk
index 9dc4e15..89111ed 100644
--- a/package/gflags/gflags.mk
+++ b/package/gflags/gflags.mk
@@ -11,7 +11,8 @@ GFLAGS_LICENSE = BSD-3c
 GFLAGS_LICENSE_FILES = COPYING.txt
 
 ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),)
-GFLAGS_CONF_OPTS = -DBUILD_gflags_LIB=OFF -DCMAKE_CXX_FLAGS=-DNO_THREADS
+GFLAGS_CONF_OPTS = -DBUILD_gflags_LIB=OFF \
+	-DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) -DNO_THREADS"
 endif
 
 $(eval $(cmake-package))
-- 
2.10.0

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH v4 5/9] package/gnuradio: include TARGET_CFLAGS to the overloaded CFLAGS
  2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
                   ` (3 preceding siblings ...)
  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 ` 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
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Samuel Martin @ 2016-10-15 20:31 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

---
changes v3->v4:
- fix commit subject
- update A/R/T tags

changes v2->v3:
- new patch
---
 package/gnuradio/gnuradio.mk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package/gnuradio/gnuradio.mk b/package/gnuradio/gnuradio.mk
index 972f7a4..5cb00d2 100644
--- a/package/gnuradio/gnuradio.mk
+++ b/package/gnuradio/gnuradio.mk
@@ -36,7 +36,7 @@ GNURADIO_INSTALL_STAGING = YES
 # CFLAGS to decide whether to build the NEON functions or not, and
 # wants to see the string 'armv7' in the CFLAGS.
 ifeq ($(BR2_ARM_CPU_ARMV7A)$(BR2_ARM_CPU_HAS_NEON),yy)
-GNURADIO_CONF_OPTS += -DCMAKE_C_FLAGS="-march=armv7-a"
+GNURADIO_CONF_OPTS += -DCMAKE_C_FLAGS="$(TARGET_CFLAGS) -march=armv7-a"
 endif
 
 # As soon as -mfpu=neon is supported by the compiler, gnuradio will try
-- 
2.10.0

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH v4 6/9] package/libcec: include TARGET_{C, CXX}FLAGS to the overloaded {C, CXX}FLAGS
  2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
                   ` (4 preceding siblings ...)
  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 ` Samuel Martin
  2016-10-15 20:31 ` [Buildroot] [PATCH v4 7/9] package/opencv3: fix CMAKE_CXX_FLAGS Samuel Martin
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Samuel Martin @ 2016-10-15 20:31 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

---
changes v3->v4:
- fix commit subject
- update A/R/T tags

changes v2->v3:
- new patch
---
 package/libcec/libcec.mk | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/package/libcec/libcec.mk b/package/libcec/libcec.mk
index b762d88..55c5fbb 100644
--- a/package/libcec/libcec.mk
+++ b/package/libcec/libcec.mk
@@ -29,8 +29,9 @@ endif
 ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)
 LIBCEC_DEPENDENCIES += rpi-userland
 LIBCEC_CONF_OPTS += \
-	-DCMAKE_C_FLAGS="-lvcos -lvchiq_arm" \
-	-DCMAKE_CXX_FLAGS="-I$(STAGING_DIR)/usr/include/interface/vmcs_host/linux \
+	-DCMAKE_C_FLAGS="$(TARGET_CFLAGS) -lvcos -lvchiq_arm" \
+	-DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) \
+		-I$(STAGING_DIR)/usr/include/interface/vmcs_host/linux \
 		-I$(STAGING_DIR)/usr/include/interface/vcos/pthreads"
 endif
 
-- 
2.10.0

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH v4 7/9] package/opencv3: fix CMAKE_CXX_FLAGS
  2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
                   ` (5 preceding siblings ...)
  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 ` 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
  8 siblings, 0 replies; 10+ messages in thread
From: Samuel Martin @ 2016-10-15 20:31 UTC (permalink / raw)
  To: buildroot

From: Max Filippov <jcmvbkbc@gmail.com>

The commit 4904c4c "package/opencv3: use BR2_TOOLCHAIN_HAS_LIBATOMIC"
overrides CMAKE_CXX_FLAGS with the single -latomic, losing all ABI
CFLAGS that are passed there by default. This breaks build on xtensa
where ABI CFLAGS contain important code generation options.

Append $(TARGET_CXXFLAGS) to CMAKE_CXX_FLAGS along with -latomic.

Fixes:
  http://autobuild.buildroot.net/results/7f1c96abd8fbb5b358a07100ab623316e9bb9dcd
  http://autobuild.buildroot.net/results/e0c93d0f6d1da0d62d4dbba211a275bfe75e9645
  http://autobuild.buildroot.net/results/53e7e4b4b6a7b48b8012799d7507f7594dbf01b2

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

---

changes v3->v4 [Samuel]:
- update A/R/T tags
---
 package/opencv3/opencv3.mk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package/opencv3/opencv3.mk b/package/opencv3/opencv3.mk
index 2529de9..10660a9 100644
--- a/package/opencv3/opencv3.mk
+++ b/package/opencv3/opencv3.mk
@@ -12,7 +12,7 @@ OPENCV3_LICENSE_FILES = LICENSE
 
 # Uses __atomic_fetch_add_4
 ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
-OPENCV3_CONF_OPTS += -DCMAKE_CXX_FLAGS="-latomic"
+OPENCV3_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) -latomic"
 endif
 
 # OpenCV component options
-- 
2.10.0

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH v4 8/9] package/rpi-userland: include TARGET_CFLAGS to the overloaded CFLAGS
  2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
                   ` (6 preceding siblings ...)
  2016-10-15 20:31 ` [Buildroot] [PATCH v4 7/9] package/opencv3: fix CMAKE_CXX_FLAGS Samuel Martin
@ 2016-10-15 20:31 ` Samuel Martin
  2016-10-15 20:31 ` [Buildroot] [PATCH v4 9/9] toochainfile.cmake: rework the way Buildroot sets flags Samuel Martin
  8 siblings, 0 replies; 10+ messages in thread
From: Samuel Martin @ 2016-10-15 20:31 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

---
changes v3->v4:
- fix commit subject
- update A/R/T tags

changes v2->v3:
- new patch
---
 package/rpi-userland/rpi-userland.mk | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/package/rpi-userland/rpi-userland.mk b/package/rpi-userland/rpi-userland.mk
index 86cde87..4a6eb41 100644
--- a/package/rpi-userland/rpi-userland.mk
+++ b/package/rpi-userland/rpi-userland.mk
@@ -10,7 +10,8 @@ RPI_USERLAND_LICENSE = BSD-3c
 RPI_USERLAND_LICENSE_FILES = LICENCE
 RPI_USERLAND_INSTALL_STAGING = YES
 RPI_USERLAND_CONF_OPTS = -DVMCS_INSTALL_PREFIX=/usr \
-	-DCMAKE_C_FLAGS="-DVCFILED_LOCKFILE=\\\"/var/run/vcfiled.pid\\\""
+	-DCMAKE_C_FLAGS="$(TARGET_CFLAGS) \
+		-DVCFILED_LOCKFILE=\\\"/var/run/vcfiled.pid\\\""
 
 RPI_USERLAND_PROVIDES = libegl libgles libopenmax libopenvg
 
-- 
2.10.0

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH v4 9/9] toochainfile.cmake: rework the way Buildroot sets flags
  2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
                   ` (7 preceding siblings ...)
  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 ` Samuel Martin
  8 siblings, 0 replies; 10+ messages in thread
From: Samuel Martin @ 2016-10-15 20:31 UTC (permalink / raw)
  To: buildroot

From the build configuration, Buildroot defines and set some compiler
and linker flags that should be passed to any packages build-system.

For package using the cmake-package infrastructure, this is achieved
via the toolchainfile.cmake.

This change simplifies the way the toolchainfile.cmake file handles
these flags: it now just sets them, without any attempt to extend them
with those Buildroot defined.

This change still allows overriding these flags from the configure
command line.

So, now, when a CMake-based package needs to extend them, they should
be fully set from the package *.mk file. This behavior is consistent
with what is done for others package infrastructures.

This change should not pull any regression WRT the bug #7280 [1].

However, now, when someone uses the toolchainfile.cmake file outside of
Buildroot, he/she must overload all compiler/linker flags (including the
ones Buildroot sets since they no longer get automatically added).

[1] https://bugs.busybox.net/show_bug.cgi?id=7280

Cc: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Cc: Max Filippov <jcmvbkbc@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Samuel Martin <s.martin49@gmail.com>

---
changes v3->v4:
- add a note about what the CMake code should look like (Arnout)
- fix overriding support (add missing CACHE keyword)
- update CHANGES text
---
 CHANGES                             |  5 ++++-
 support/misc/toolchainfile.cmake.in | 17 +++++++++++++----
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/CHANGES b/CHANGES
index c0e3e79..3657710 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,7 +2,10 @@
 
     toolchainfile.cmake:
     * when used outside of Buildroot, if not specified on the command
-      line, the CMAKE_BUILD_TYPE is by toolchainfile.cmake.
+      line, the CMAKE_BUILD_TYPE is by toolchainfile.cmake;
+    * when used outside of Buildroot with custom compiler/linker
+      flags, the Buildroot flags should be set along side with the
+      custom ones.
 
 2016.08, Released September 1st, 2016
 
diff --git a/support/misc/toolchainfile.cmake.in b/support/misc/toolchainfile.cmake.in
index fde141a..b70b726 100644
--- a/support/misc/toolchainfile.cmake.in
+++ b/support/misc/toolchainfile.cmake.in
@@ -28,9 +28,17 @@ set(CMAKE_CXX_FLAGS_RELEASE " -DNEBUG" CACHE)
 # Build type from the Buildroot configuration
 set(CMAKE_BUILD_TYPE @@BR_CMAKE_BUILD_TYPE@@ CACHE)
 
-set(CMAKE_C_FLAGS "@@TARGET_CFLAGS@@ ${CMAKE_C_FLAGS}" CACHE STRING "Buildroot CFLAGS")
-set(CMAKE_CXX_FLAGS "@@TARGET_CXXFLAGS@@ ${CMAKE_CXX_FLAGS}" CACHE STRING "Buildroot CXXFLAGS")
-set(CMAKE_EXE_LINKER_FLAGS "@@TARGET_LDFLAGS@@ ${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Buildroot LDFLAGS")
+# Buildroot defaults flags.
+# If you are using this toolchainfile.cmake file outside of Buildroot and
+# want to customize the compiler/linker flags, then:
+# * set them all on the cmake command line, e.g.:
+#     cmake -DCMAKE_C_FLAGS="@@TARGET_CFLAGS@@ -Dsome_custom_flag" ...
+# * and make sure the project's CMake code extendsthem like this if needed:
+#     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Dsome_definitions")
+set(CMAKE_C_FLAGS "@@TARGET_CFLAGS@@" CACHE)
+set(CMAKE_CXX_FLAGS "@@TARGET_CXXFLAGS@@" CACHE)
+set(CMAKE_EXE_LINKER_FLAGS "@@TARGET_LDFLAGS@@" CACHE)
+
 set(CMAKE_INSTALL_SO_NO_EXE 0)
 
 set(CMAKE_PROGRAM_PATH "${RELOCATED_HOST_DIR}/usr/bin")
@@ -46,6 +54,7 @@ set(ENV{PKG_CONFIG_SYSROOT_DIR} "${RELOCATED_HOST_DIR}/@@STAGING_SUBDIR@@")
 set(CMAKE_C_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CC@@")
 set(CMAKE_CXX_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CXX@@")
 if(@@TOOLCHAIN_HAS_FORTRAN@@)
-  set(CMAKE_Fortran_FLAGS "@@TARGET_FCFLAGS@@ ${CMAKE_Fortran_FLAGS}" CACHE STRING "Buildroot FCFLAGS")
+  # Buildroot defaults flags.
+  set(CMAKE_Fortran_FLAGS "@@TARGET_FCFLAGS@@" CACHE)
   set(CMAKE_Fortran_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_FC@@")
 endif()
-- 
2.10.0

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2016-10-15 20:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-15 20:31 [Buildroot] [PATCH v4 0/9] Misc. CMake fixes Samuel Martin
2016-10-15 20:31 ` [Buildroot] [PATCH v4 1/9] package/pkg-cmake.mk: fix build type and optimization flags Samuel Martin
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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.