[Buildroot] [PATCH 8/8] package/cmake: only build what is necessary
Romain Naour
romain.naour at openwide.fr
Wed Mar 4 23:30:59 UTC 2015
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 at 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 at openwide.fr>
Tested-by: Romain Naour <romain.naour at 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 at 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 at 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
More information about the buildroot
mailing list