Tecnologia e non solo

aprile 6, 2008

fusion/plugins-main e cmake.

Filed under: Fusion,OpenCompositing,Varie — telperion @ 2:31 pm

cmake vs autogen.sh in sec

Compilazione di fusion/plugins-main con il nuovo CMake build system
che dovrebbe diventare quanto prima il nuovo sistema di compilazione di compiz/fusion.

Testiamo.

Con cmake

time cmake -DCMAKE_INSTALL_PREFIX="/usr" ..
real 0m3.650s
user 0m2.001s
sys 0m1.221s

time make
real 0m41.574s
user 0m29.286s
sys 0m2.721s

totale real con cmake e make ~ 0m45s

Con autogen.sh

time ./autogen.sh --prefix=/usr
real 0m31.394s
user 0m18.969s
sys 0m3.158s

time make
real 2m2.909s
user 1m32.940s
sys 0m14.308s

totale real con autogen.sh e make ~ 2m33s

Come dice Dennis Kasprzyk, il boost di velocità è notevole ~4 volte più veloce con cmake,
quindi anzichè nei canonici 10 minuti, tutto l’ambaradan potrebbe compilarsi in soli 3 minuti
nel mio sistema. Se poi uniamo la maggiore semplicità (sulla quale non mi esprimo poichè inesperto)
ben venga una rapida conversione a cmake (per ora solo fusion/plugins-main ha la doppia scelta).

Per maggior compatibilità forse sarebbe bene implementare anche il make uninstall come da cmake faq:

Can I do “make uninstall” with CMake?

By default, CMake does not provide the “make uninstall” target, so you cannot do this. We do not want “make uninstall” to remove useful files from the system.

If you want an “uninstall” target in your project, then nobody prevents you from providing one. You need to delete the files listed in install_manifest.txt file. Here is how to do it. First create file cmake_uninstall.cmake.in in the top-level directory of the project:

IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
  MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")

FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
STRING(REGEX REPLACE "\n" ";" files "${files}")
FOREACH(file ${files})
  MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
  IF(EXISTS "$ENV{DESTDIR}${file}")
    EXEC_PROGRAM(
      "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
      OUTPUT_VARIABLE rm_out
      RETURN_VALUE rm_retval
      )
    IF(NOT "${rm_retval}" STREQUAL 0)
      MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
    ENDIF(NOT "${rm_retval}" STREQUAL 0)
  ELSE(EXISTS "$ENV{DESTDIR}${file}")
    MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
  ENDIF(EXISTS "$ENV{DESTDIR}${file}")
ENDFOREACH(file)

Then in the top-level CMakeLists.txt add the following logic:

CONFIGURE_FILE(
  "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
  "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  IMMEDIATE @ONLY)

ADD_CUSTOM_TARGET(uninstall
  "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")

Now you will have an “uninstall” target at the top-level directory of your build tree.

Instead of creating an “uninstall” target, Unix users could enter this command in the shell:

xargs rm < install_manifest.txt

3 commenti

  1. a me non sconfinfera niente niente niente.
    trovo cmake difficilissimo da usare e da comprendere
    per quanto mi riguarda, male. Molto male

    Commento di LuNa — aprile 7, 2008 @ 4:27 pm

  2. Ottimo; cmake è fantastico in confronto ad autogen e compagnia

    Commento di programmatore — aprile 29, 2008 @ 8:29 pm

  3. ragazzi io non capisco….cmake difficilissimo???? rispetto a che ? alla triade infernale autoconf,automake,autogen etc???…ma non scherziamo!
    Cmake è un ottimo tool di build e testing. Io non capisco chi si ostina ancora a creare Makefile a mano e script di autoconf assurdi.

    Commento di windup — dicembre 4, 2008 @ 12:06 pm


RSS feed for comments on this post.

Crea un sito o un blog gratuitamente presso WordPress.com.

%d blogger cliccano Mi Piace per questo: