From: Arnout Vandecappelle <arnout@mind.be>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 05/14] pkg-cmake.mk: enable ccache for cmake packages
Date: Fri, 25 Apr 2014 00:39:07 +0200 [thread overview]
Message-ID: <5359928B.7070105@mind.be> (raw)
In-Reply-To: <1398293313-17580-6-git-send-email-s.martin49@gmail.com>
On 24/04/14 00:48, Samuel Martin wrote:
> This patch updates the generated toolchainfile.cmake to use ccache.
>
> When toolchainfile.cmake is used inside Buildroot, using ccache during
> the build is driven by a CMake knob: USE_CCACHE, automatically set by
> the cmake-package infrastructure and reflecting the BR2_CCACHE value.
>
> Since this toolchainefile.cmake file can be used outside Buildroot, and
> this file also set a couple of things (among these: the sysroot cflag,
> some pkg-config environment variables), it is important to set the
> compiler variables as well to keep the consistency of the
> cross-compilation configuration.
> So, when it is used outside Buildroot, using ccache for the build is
> driven by the ccache program availability.
I don't understand this. We can just use br-ccache when it's called from
outside buildroot as well, no?
>
> Note that using ccache for the build is achieved by setting the *_ARG1
> CMake variables to let CMake use ccache without failing in detecting
> the compiler.
>
> Signed-off-by: Samuel Martin <s.martin49@gmail.com>
> Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
>
> ---
> changes v2 -> v3 (Samuel):
> - rebase
> - inline the -DUSE_CCACHE=... in the configure commands.
> - always set the compiler variables, even when called for outside
> Buildroot.
> - update commit message
>
> changes v1 -> v2 (Luca):
> - totally reimplemented based on Samuel's suggestion;
> - added dependency on host-ccache for cmake packages if ccache is
> enabled.
> ---
> package/pkg-cmake.mk | 35 +++++++++++++++++++++++++++++++++--
> 1 file changed, 33 insertions(+), 2 deletions(-)
>
> diff --git a/package/pkg-cmake.mk b/package/pkg-cmake.mk
> index b2ac2df..a032426 100644
> --- a/package/pkg-cmake.mk
> +++ b/package/pkg-cmake.mk
> @@ -66,6 +66,7 @@ define $(2)_CONFIGURE_CMDS
> -DCMAKE_INSTALL_PREFIX="/usr" \
> -DCMAKE_COLOR_MAKEFILE=OFF \
> -DBUILD_SHARED_LIBS=$(if $(BR2_PREFER_STATIC_LIB),OFF,ON) \
> + -DUSE_CCACHE=$(if $(BR2_CCACHE),ON,OFF) \
> $$($$(PKG)_CONF_OPT) \
> )
> endef
> @@ -83,6 +84,7 @@ define $(2)_CONFIGURE_CMDS
> -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY="BOTH" \
> -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE="BOTH" \
> -DCMAKE_INSTALL_PREFIX="$$(HOST_DIR)/usr" \
> + -DUSE_CCACHE=$(if $(BR2_CCACHE),ON,OFF) \
> $$($$(PKG)_CONF_OPT) \
> )
> endef
> @@ -161,8 +163,6 @@ host-cmake-package = $(call inner-cmake-package,host-$(pkgname),$(call UPPERCASE
> define TOOLCHAINFILE_CMAKE
> string(REPLACE /usr/share/buildroot "" _HOST_DIR $${CMAKE_CURRENT_LIST_DIR})
> set(CMAKE_SYSTEM_NAME Linux)
> -set(CMAKE_C_COMPILER $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))gcc)
> -set(CMAKE_CXX_COMPILER $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))g++)
> set(CMAKE_C_FLAGS "$${CMAKE_C_FLAGS} $(TARGET_CFLAGS)" CACHE STRING "Buildroot CFLAGS" FORCE)
> set(CMAKE_CXX_FLAGS "$${CMAKE_CXX_FLAGS} $(TARGET_CXXFLAGS)" CACHE STRING "Buildroot CXXFLAGS" FORCE)
> set(CMAKE_INSTALL_SO_NO_EXE 0)
> @@ -172,6 +172,37 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
> set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
> set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
> set(ENV{PKG_CONFIG_SYSROOT_DIR} $${_HOST_DIR}/$(STAGING_SUBDIR))
> +# This toolchain file can be used both inside and outside Buildroot.
> +# * When used inside Buildroot, ccache support is explicitly driven using the
> +# USE_CCACHE variable.
> +# * When used outside Buildroot (i.e. when USE_CCACHE is not defined), ccache
> +# support is automatically enabled if the ccache program is available.
> +if(DEFINED USE_CCACHE)
> + if(USE_CCACHE)
> + set(CMAKE_ASM_COMPILER $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))gcc)
> + set(CMAKE_C_COMPILER $${_HOST_DIR}/usr/bin/ccache)
> + set(CMAKE_CXX_COMPILER $${_HOST_DIR}/usr/bin/ccache)
> + set(CMAKE_C_COMPILER_ARG1 $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))gcc)
> + set(CMAKE_CXX_COMPILER_ARG1 $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))g++)
> + else()
> + set(CMAKE_C_COMPILER $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))gcc)
> + set(CMAKE_CXX_COMPILER $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))g++)
> + endif()
I don't see why this USE_CCACHE condition should be dynamic. If
BR2_CCACHE is set, then we can _always_ use ccache, no? So:
ifeq($(BR2_CCACHE),y)
define TOOLCHAINFILE_CMAKE_CCACHE
set(CMAKE_C_COMPILER $${_HOST_DIR}/usr/bin/ccache)
set(CMAKE_CXX_COMPILER $${_HOST_DIR}/usr/bin/ccache)
...
endef
else # BR2_CCACHE
define TOOLCHAINFILE_CMAKE_CCACHE
...
endef
endif
> +else()
> + find_program(CCACHE ccache)
Note that if we don't set PATH explicitly to point to the host dir, this
will point to the system's ccache instead of buildroot ccache.
Regards,
Arnout
> + if(CCACHE)
> + set(CMAKE_ASM_COMPILER $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))gcc)
> + set(CMAKE_C_COMPILER $${CCACHE})
> + set(CMAKE_CXX_COMPILER $${CCACHE})
> + set(CMAKE_C_COMPILER_ARG1 $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))gcc)
> + set(CMAKE_CXX_COMPILER_ARG1 $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))g++)
> + message(STATUS "ccache program has been found and will be used for the build.")
> + message(STATUS " To disable ccache, add -DUSE_CCACHE=OFF on the cmake command line.")
> + else()
> + set(CMAKE_C_COMPILER $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))gcc)
> + set(CMAKE_CXX_COMPILER $(subst $(HOST_DIR),$${_HOST_DIR},$(TARGET_CROSS))g++)
> + endif()
> +endif()
> endef
>
> $(HOST_DIR)/usr/share/buildroot/toolchainfile.cmake:
>
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286500
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
next prev parent reply other threads:[~2014-04-24 22:39 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-23 22:48 [Buildroot] [PATCH 00/14] CMake infrastructure refactoring Samuel Martin
2014-04-23 22:48 ` [Buildroot] [PATCH 01/14] pkg-cmake.mk: replace "echo -en" with printf Samuel Martin
2014-04-24 20:26 ` Arnout Vandecappelle
2014-04-24 20:31 ` Peter Korsgaard
2014-04-23 22:48 ` [Buildroot] [PATCH 02/14] pkg-cmake.mk: remove unneeded quotes in the generated toolchainfile.cmake Samuel Martin
2014-04-24 20:34 ` Arnout Vandecappelle
2014-04-23 22:48 ` [Buildroot] [PATCH 03/14] pkg-cmake.mk: rework toolchainfile.cmake Samuel Martin
2014-04-24 20:59 ` Arnout Vandecappelle
2014-04-23 22:48 ` [Buildroot] [PATCH 04/14] pkg-cmake.mk: do not hardcode absolute path in toolchainfile.cmake Samuel Martin
2014-04-24 22:10 ` Arnout Vandecappelle
2014-04-23 22:48 ` [Buildroot] [PATCH 05/14] pkg-cmake.mk: enable ccache for cmake packages Samuel Martin
2014-04-24 22:39 ` Arnout Vandecappelle [this message]
2014-05-29 11:03 ` Samuel Martin
2014-04-23 22:48 ` [Buildroot] [PATCH 06/14] pkg-cmake.mk: cosmetic changes in the generated toolchainfile.cmake file Samuel Martin
2014-04-24 3:47 ` Baruch Siach
2014-05-28 19:07 ` Samuel Martin
2014-04-23 22:48 ` [Buildroot] [PATCH 07/14] pkg-cmake.mk: set additional variables in toolchainfile.cmake Samuel Martin
2014-04-24 22:41 ` Arnout Vandecappelle
2014-05-28 19:09 ` Samuel Martin
2014-04-23 22:48 ` [Buildroot] [PATCH 08/14] rpi-userland: cleanup *_CONF_OPT Samuel Martin
2014-04-23 22:48 ` [Buildroot] [PATCH 09/14] pkg-cmake.mk: globally disable BUILD_TESTING flag Samuel Martin
2014-04-24 22:45 ` Arnout Vandecappelle
2014-05-28 19:17 ` Samuel Martin
2014-04-23 22:48 ` [Buildroot] [PATCH 10/14] pkg-cmake.mk: globally drive the CMAKE_BUILD_TYPE flag using BR2_ENABLE_DEBUG Samuel Martin
2014-04-24 22:46 ` Arnout Vandecappelle
2014-05-28 8:42 ` Maxime Hadjinlian
2014-04-23 22:48 ` [Buildroot] [PATCH 11/14] openpowerlink: do not override CMAKE_BUILD_TYPE Samuel Martin
2014-04-23 22:48 ` [Buildroot] [PATCH 12/14] opencv: " Samuel Martin
2014-04-23 22:48 ` [Buildroot] [PATCH 13/14] flann: " Samuel Martin
2014-04-23 22:48 ` [Buildroot] [PATCH 14/14] qhull: " 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=5359928B.7070105@mind.be \
--to=arnout@mind.be \
--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 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.