All of lore.kernel.org
 help / color / mirror / Atom feed
From: Romain Naour <romain.naour@openwide.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 8/8] package/cmake: only build what is necessary
Date: Thu, 05 Mar 2015 00:30:59 +0100	[thread overview]
Message-ID: <54F795B3.9070803@openwide.fr> (raw)
In-Reply-To: <1422220435-18689-9-git-send-email-s.martin49@gmail.com>

Hi Samuel,

Le 25/01/2015 22:13, Samuel Martin a ?crit :
> Add a patch allowing to select the binaries to be built.
> 
> After applying this change, the time to build host-cmake is roughly
> 25% shorter.
> 
> Signed-off-by: Samuel Martin <s.martin49@gmail.com>
> 
> ---

Here are my results without and with your patch:

without the patch BR2_JLEVEL=1:
real	4m59.761s user	3m46.531s sys	0m24.404s

without the patch BR2_JLEVEL=5:
real	3m25.126s user	4m2.761s sys	0m24.406s

With the patch BR2_JLEVEL=1:
real	3m37.735s user	2m45.789s sys	0m18.675s

With the patch BR2_JLEVEL=5:
real	2m31.274s user	2m58.932s sys	0m18.779s

Reviewed-by: Romain Naour <romain.naour@openwide.fr>
Tested-by: Romain Naour <romain.naour@openwide.fr>

> Here is the actual results of the build I run on my machine:
> 
> 4x Intel(R) Core(TM) i7-4510U CPU @ 2.00GHz
> 8GB RAM
> SSD
> 
> w/o the patch, automatic job-level (i.e. 5 in my case):
>   675.36user 29.59system 4:21.72elapsed 269%CPU
>   686.98user 31.07system 4:26.85elapsed 269%CPU
>   694.84user 31.11system 4:35.42elapsed 263%CPU
>   697.24user 31.19system 4:32.17elapsed 267%CPU
>   686.62user 30.89system 4:23.00elapsed 272%CPU
>   696.28user 31.33system 4:29.15elapsed 270%CPU
>   677.73user 30.18system 4:15.15elapsed 277%CPU
>   692.62user 31.45system 4:47.56elapsed 251%CPU
>   679.78user 31.53system 4:20.99elapsed 272%CPU
>   685.63user 32.10system 4:28.15elapsed 267%CPU
> 
> w/o the patch, w/ BR2_JLEVEL=1:
>   340.58user 18.57system 6:19.26elapsed 94%CPU
>   337.48user 18.70system 6:16.41elapsed 94%CPU
>   335.39user 18.53system 6:13.74elapsed 94%CPU
>   335.93user 17.94system 6:13.84elapsed 94%CPU
>   335.49user 18.19system 6:13.67elapsed 94%CPU
> 
> w/ the patch, automatic job-level (i.e. 5 in my case):
>   494.96user 23.91system 3:13.87elapsed 267%CPU
>   506.90user 24.37system 3:16.83elapsed 269%CPU
>   504.37user 24.42system 3:17.57elapsed 267%CPU
>   499.79user 24.19system 3:04.50elapsed 284%CPU
>   507.02user 23.67system 3:04.93elapsed 286%CPU
>   510.93user 24.43system 3:08.19elapsed 284%CPU
>   512.43user 24.16system 3:08.53elapsed 284%CPU
>   510.80user 24.65system 3:08.64elapsed 283%CPU
>   512.28user 24.38system 3:09.62elapsed 283%CPU
>   514.90user 24.46system 3:08.96elapsed 285%CPU
> 
> w/ the patch, w/ BR2_JLEVEL=1:
>   244.56user 14.88system 4:36.88elapsed 93%CPU
>   247.02user 15.43system 4:39.89elapsed 93%CPU
>   247.14user 15.04system 4:39.76elapsed 93%CPU
>   246.32user 14.75system 4:38.93elapsed 93%CPU
>   247.53user 14.64system 4:40.27elapsed 93%CPU
> ---
>  ...-allow-to-select-what-program-to-be-built.patch | 231 +++++++++++++++++++++
>  package/cmake/cmake.mk                             |   4 +
>  2 files changed, 235 insertions(+)
>  create mode 100644 package/cmake/0001-CMake-allow-to-select-what-program-to-be-built.patch
> 
> diff --git a/package/cmake/0001-CMake-allow-to-select-what-program-to-be-built.patch b/package/cmake/0001-CMake-allow-to-select-what-program-to-be-built.patch
> new file mode 100644
> index 0000000..d6e53da
> --- /dev/null
> +++ b/package/cmake/0001-CMake-allow-to-select-what-program-to-be-built.patch
> @@ -0,0 +1,231 @@
> +From 9aeb3ea5f9c69bbc9a69672762d5fae939c3fd8c Mon Sep 17 00:00:00 2001
> +From: Samuel Martin <s.martin49@gmail.com>
> +Date: Sun, 25 Jan 2015 18:11:13 +0100
> +Subject: [PATCH] CMake: allow to select what program to be built
> +
> +Signed-off-by: Samuel Martin <s.martin49@gmail.com>
> +---
> + CMakeLists.txt        | 24 ++++++++++++++++++++++++
> + Source/CMakeLists.txt | 33 ++++++++++++++++++++++++++++++++-
> + 2 files changed, 56 insertions(+), 1 deletion(-)
> +
> +diff --git a/CMakeLists.txt b/CMakeLists.txt
> +index 71850de..cb9375e 100644
> +--- a/CMakeLists.txt
> ++++ b/CMakeLists.txt
> +@@ -43,6 +43,16 @@ if(CMAKE_ENCODING_UTF8)
> +   set(KWSYS_ENCODING_DEFAULT_CODEPAGE CP_UTF8)
> + endif()
> + 
> ++# options to select what programs to be built
> ++option(BUILD_CMAKE "Build cmake program" ON)
> ++mark_as_advanced(BUILD_CMAKE)
> ++
> ++option(BUILD_CTEST "Build ctest program" ON)
> ++mark_as_advanced(BUILD_CTEST)
> ++
> ++option(BUILD_CPACK "Build cpack program" ON)
> ++mark_as_advanced(BUILD_CPACK)
> ++
> + #-----------------------------------------------------------------------
> + # a macro to deal with system libraries, implemented as a macro
> + # simply to improve readability of the main script
> +@@ -241,6 +251,7 @@ macro (CMAKE_BUILD_UTILITIES)
> + 
> +   #---------------------------------------------------------------------
> +   # Build zlib library for Curl, CMake, and CTest.
> ++  if(BUILD_CMAKE OR BUILD_CTEST OR NOT CMAKE_USE_SYSTEM_CURL)
> +   set(CMAKE_ZLIB_HEADER "cm_zlib.h")
> +   if(CMAKE_USE_SYSTEM_ZLIB)
> +     find_package(ZLIB)
> +@@ -256,9 +267,11 @@ macro (CMAKE_BUILD_UTILITIES)
> +     add_subdirectory(Utilities/cmzlib)
> +     CMAKE_SET_TARGET_FOLDER(cmzlib "Utilities/3rdParty")
> +   endif()
> ++  endif()
> + 
> +   #---------------------------------------------------------------------
> +   # Build Curl library for CTest.
> ++  if(BUILD_CMAKE OR BUILD_CTEST)
> +   if(CMAKE_USE_SYSTEM_CURL)
> +     find_package(CURL)
> +     if(NOT CURL_FOUND)
> +@@ -284,9 +297,11 @@ macro (CMAKE_BUILD_UTILITIES)
> +     CMAKE_SET_TARGET_FOLDER(cmcurl "Utilities/3rdParty")
> +     CMAKE_SET_TARGET_FOLDER(LIBCURL "Utilities/3rdParty")
> +   endif()
> ++  endif()
> + 
> +   #---------------------------------------------------------------------
> +   # Build Compress library for CTest.
> ++  if(BUILD_CMAKE OR BUILD_CTEST)
> +   set(CMAKE_COMPRESS_INCLUDES
> +     "${CMAKE_CURRENT_BINARY_DIR}/Utilities/cmcompress")
> +   set(CMAKE_COMPRESS_LIBRARIES "cmcompress")
> +@@ -301,6 +316,7 @@ macro (CMAKE_BUILD_UTILITIES)
> +     add_subdirectory(Utilities/cmbzip2)
> +     CMAKE_SET_TARGET_FOLDER(cmbzip2 "Utilities/3rdParty")
> +   endif()
> ++  endif()
> + 
> +   #---------------------------------------------------------------------
> +   # Build or use system liblzma for libarchive.
> +@@ -321,6 +337,7 @@ macro (CMAKE_BUILD_UTILITIES)
> + 
> +   #---------------------------------------------------------------------
> +   # Build or use system libarchive for CMake and CTest.
> ++  if(BUILD_CMAKE OR BUILD_CTEST)
> +   if(CMAKE_USE_SYSTEM_LIBARCHIVE)
> +     find_package(LibArchive)
> +     if(NOT LibArchive_FOUND)
> +@@ -347,9 +364,11 @@ macro (CMAKE_BUILD_UTILITIES)
> +     CMAKE_SET_TARGET_FOLDER(cmlibarchive "Utilities/3rdParty")
> +     set(CMAKE_TAR_LIBRARIES cmlibarchive ${BZIP2_LIBRARIES})
> +   endif()
> ++  endif()
> + 
> +   #---------------------------------------------------------------------
> +   # Build expat library for CMake and CTest.
> ++  if(BUILD_CMAKE OR BUILD_CTEST)
> +   if(CMAKE_USE_SYSTEM_EXPAT)
> +     find_package(EXPAT)
> +     if(NOT EXPAT_FOUND)
> +@@ -364,9 +383,11 @@ macro (CMAKE_BUILD_UTILITIES)
> +     add_subdirectory(Utilities/cmexpat)
> +     CMAKE_SET_TARGET_FOLDER(cmexpat "Utilities/3rdParty")
> +   endif()
> ++  endif()
> + 
> +   #---------------------------------------------------------------------
> +   # Build XMLRPC library for CMake and CTest.
> ++  if(BUILD_CMAKE OR BUILD_CTEST)
> +   if(CTEST_USE_XMLRPC)
> +     find_package(XMLRPC QUIET REQUIRED libwww-client)
> +     if(NOT XMLRPC_FOUND)
> +@@ -376,6 +397,7 @@ macro (CMAKE_BUILD_UTILITIES)
> +     set(CMAKE_XMLRPC_INCLUDES ${XMLRPC_INCLUDE_DIRS})
> +     set(CMAKE_XMLRPC_LIBRARIES ${XMLRPC_LIBRARIES})
> +   endif()
> ++  endif()
> + 
> +   #---------------------------------------------------------------------
> +   # Use curses?
> +@@ -583,7 +605,9 @@ if(NOT CMake_TEST_EXTERNAL_CMAKE)
> +   add_subdirectory(Utilities)
> + endif()
> + 
> ++if(BUILD_CTEST)
> + add_subdirectory(Tests)
> ++endif()
> + 
> + if(NOT CMake_TEST_EXTERNAL_CMAKE)
> +   if(BUILD_TESTING)
> +diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
> +index f9405b3..2e14def 100644
> +--- a/Source/CMakeLists.txt
> ++++ b/Source/CMakeLists.txt
> +@@ -481,6 +481,7 @@ if(WIN32 AND NOT CYGWIN AND NOT BORLAND)
> + endif()
> + 
> + # create a library used by the command line and the GUI
> ++if(BUILD_CMAKE)
> + add_library(CMakeLib ${SRCS})
> + target_link_libraries(CMakeLib cmsys
> +   ${CMAKE_EXPAT_LIBRARIES} ${CMAKE_ZLIB_LIBRARIES}
> +@@ -496,6 +497,7 @@ endif()
> + if(CMAKE_BUILD_ON_VISUAL_STUDIO OR MINGW)
> +   target_link_libraries(CMakeLib rpcrt4)
> + endif()
> ++endif()
> + 
> + #
> + # CTestLib
> +@@ -565,8 +567,10 @@ set(CTEST_SRCS cmCTest.cxx
> +   )
> + 
> + # Build CTestLib
> ++if(BUILD_CTEST)
> + add_library(CTestLib ${CTEST_SRCS})
> + target_link_libraries(CTestLib CMakeLib ${CMAKE_CURL_LIBRARIES} ${CMAKE_XMLRPC_LIBRARIES})
> ++endif()
> + 
> + #
> + # Sources for CPack
> +@@ -628,9 +632,12 @@ if(APPLE)
> + endif()
> + 
> + # Build CPackLib
> ++if(BUILD_CPACK)
> + add_library(CPackLib ${CPACK_SRCS})
> + target_link_libraries(CPackLib CMakeLib)
> ++endif()
> + 
> ++if(BUILD_CMAKE)
> + if(APPLE)
> +   add_executable(cmakexbuild cmakexbuild.cxx)
> +   target_link_libraries(cmakexbuild CMakeLib)
> +@@ -639,36 +646,60 @@ if(APPLE)
> +   target_link_libraries(OSXScriptLauncher cmsys)
> +   target_link_libraries(OSXScriptLauncher "-framework CoreFoundation")
> + endif()
> ++endif()
> + 
> + # Build CMake executable
> ++if(BUILD_CMAKE)
> + add_executable(cmake cmakemain.cxx cmcmd.cxx cmcmd.h)
> + target_link_libraries(cmake CMakeLib)
> ++endif()
> + 
> + # Build CTest executable
> ++if(BUILD_CTEST)
> + add_executable(ctest ctest.cxx)
> + target_link_libraries(ctest CTestLib)
> ++endif()
> + 
> + # Build CPack executable
> ++if(BUILD_CPACK)
> + add_executable(cpack CPack/cpack.cxx)
> + target_link_libraries(cpack CPackLib)
> ++endif()
> + 
> + # Curses GUI
> ++if(BUILD_CMAKE)
> + if(BUILD_CursesDialog)
> +   include(${CMake_SOURCE_DIR}/Source/CursesDialog/CMakeLists.txt)
> + endif()
> ++endif()
> + 
> + # Qt GUI
> + option(BUILD_QtDialog "Build Qt dialog for CMake" FALSE)
> ++if(BUILD_CMAKE)
> + if(BUILD_QtDialog)
> +   add_subdirectory(QtDialog)
> + endif()
> ++endif()
> + 
> + include (${CMake_BINARY_DIR}/Source/LocalUserOptions.cmake OPTIONAL)
> + include (${CMake_SOURCE_DIR}/Source/LocalUserOptions.cmake OPTIONAL)
> + 
> +-install(TARGETS cmake ctest cpack DESTINATION bin)
> ++if(BUILD_CMAKE)
> ++install(TARGETS cmake DESTINATION bin)
> ++endif()
> ++
> ++if(BUILD_CTEST)
> ++install(TARGETS ctest DESTINATION bin)
> ++endif()
> ++
> ++if(BUILD_CPACK)
> ++install(TARGETS cpack DESTINATION bin)
> ++endif()
> ++
> ++if(BUILD_CMAKE)
> + if(APPLE)
> +   install(TARGETS cmakexbuild DESTINATION bin)
> + endif()
> ++endif()
> + 
> + install(FILES cmCPluginAPI.h DESTINATION ${CMAKE_DATA_DIR}/include)
> +-- 
> +2.2.2
> +
> diff --git a/package/cmake/cmake.mk b/package/cmake/cmake.mk
> index 14d5a4e..664885f 100644
> --- a/package/cmake/cmake.mk
> +++ b/package/cmake/cmake.mk
> @@ -22,6 +22,10 @@ define HOST_CMAKE_CONFIGURE_CMDS
>  			-DCMAKE_CXX_FLAGS="$(HOST_CXXFLAGS)" \
>  			-DCMAKE_EXE_LINKER_FLAGS="$(HOST_LDFLAGS)" \
>  			-DBUILD_CursesDialog=OFF \
> +			-DBUILD_CMAKE=ON \
> +			-DBUILD_CTEST=OFF \
> +			-DBUILD_CPACK=OFF \
> +			-DBUILD_TESTING=OFF \
>  	)
>  endef
>  
> 

-- 
Romain Naour

OPEN WIDE Ing?nierie - Paris
23/25, rue Daviel| 75013 PARIS
http://ingenierie.openwide.fr

Le blog des technologies libres et embarqu?es :
http://www.linuxembedded.fr

      reply	other threads:[~2015-03-04 23:30 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-25 21:13 [Buildroot] [PATCH 0/8] Misc. fixes around libftdi Samuel Martin
2015-01-25 21:13 ` [Buildroot] [PATCH 1/8 v2] package/libftdi: fix libftdi.pc Samuel Martin
2015-02-01 22:31   ` Thomas Petazzoni
2015-01-25 21:13 ` [Buildroot] [PATCH 2/8] package/libiio: update cmake code for libxml2 detection Samuel Martin
2015-01-27 21:16   ` Arnout Vandecappelle
2015-03-02 20:35     ` Samuel Martin
2015-02-14 21:15   ` Thomas Petazzoni
2015-02-14 23:33     ` Samuel Martin
2015-01-25 21:13 ` [Buildroot] [PATCH 3/8] package/libftdi: bump to version 0.20 Samuel Martin
2015-01-25 21:13 ` [Buildroot] [PATCH 4/8] package/libftdi1: new package Samuel Martin
2015-01-27 22:10   ` Arnout Vandecappelle
2015-01-25 21:13 ` [Buildroot] [PATCH 5/8] package/avrdude: depends on libftdi1 instead of libftdi Samuel Martin
2015-01-25 21:13 ` [Buildroot] [PATCH 6/8] package/openocd: " Samuel Martin
2015-01-25 21:13 ` [Buildroot] [PATCH 7/8] package/cmake: bump to version 3.1.1 Samuel Martin
2015-01-25 21:13 ` [Buildroot] [PATCH 8/8] package/cmake: only build what is necessary Samuel Martin
2015-03-04 23:30   ` Romain Naour [this message]

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=54F795B3.9070803@openwide.fr \
    --to=romain.naour@openwide.fr \
    --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.