Back Midas Rome Roody Rootana
  Midas DAQ System  Not logged in ELOG logo
Entry  28 May 2019, Stefan Ritt, Info, MIDAS switching to Cmake 
    Reply  28 May 2019, Konstantin Olchanski, Info, MIDAS switching to Cmake 
       Reply  28 May 2019, Stefan Ritt, Info, MIDAS switching to Cmake 
          Reply  29 May 2019, Stefan Ritt, Info, MIDAS switching to Cmake 
       Reply  03 Jun 2019, Konstantin Olchanski, Info, MIDAS switching to Cmake 
          Reply  05 Jun 2019, Konstantin Olchanski, Info, MIDAS switching to Cmake 
             Reply  17 Jun 2019, Konstantin Olchanski, Info, MIDAS switching to Cmake 
                Reply  17 Jun 2019, Konstantin Olchanski, Info, MIDAS switching to Cmake 
                Reply  17 Jun 2019, Stefan Ritt, Info, MIDAS switching to Cmake 
                   Reply  18 Jun 2019, Konstantin Olchanski, Info, MIDAS switching to Cmake 
Message ID: 1532     Entry time: 28 May 2019     Reply to this: 1533
Author: Stefan Ritt 
Topic: Info 
Subject: MIDAS switching to Cmake 
Great news! I got convinced by some colleagues to switch midas to Cmake. After spending about one day, I wrote some initial CMakeLists.txt file and am so excited about the advantages that I regret 
not having done this step much earlier. Here is some information:

- The Cmake and old Makefile systems can co-exist. So the old "make" in the midas root still works as previously.

- To use Cmake, do

midas$ mkdir build
midas$ cd build
midas/build$ cmake ..
midas/build$ make

Depending on your installation, it might be necessary to call "cmake3" instead of "cmake". The configuration requires Cmake 3.0 or later.

- After successful compilation, all programs and libraries are in the "build" directory. We kind of concluded that a system-wide midas installation (like under /usr/local/bin) is not necessary these days, 
as long as you have your MIDASSYS and PATH environment variables defined correctly. Some examples move all files from "build" to "bin"/"lib" under midas, but I'm not sure if we need that.

- Interestingly enough, in my iMac(Late 2015), the old Makefile build takes 19.5s, which the new one take 12s. So apparently some clever dependency checking is done in Cmake.

- The compile options are now handled in the Cmake cache file which is important to remember. Changing option(USE_SSL ON) in CMakeLists.txt just modifies the default value on a fresh install. To 
change the flags between compilations, use the "ccmake .." interface instead. This lets you also switch from Debug to Release mode easily.

- I love how the library handling is done. The code

  find_package(OpenSSL REQUIRED)
  include_directories(${OPENSSL_INCLUDE_DIR})
  target_link_libraries(mhttpd midas ${OPENSSL_LIBRARIES})

is so much simpler than our clumsy conditional compiling we needed in the old Makefile. 

- Cmake is the basis of the CLion IDE which is my favourite development environment now (https://www.jetbrains.com/clion/). So I can work inside the IDE and see the full project, I can do interactive 
debugging etc. and still do a simple 'make' on systems where CLion is not installed. I can only recommend everybody to have a look at CLion. It is free for university teachers and open source 
developers (like I got my free license because of ELOG).

- The CMakeLists.txt is not yet complete. It does not contain cross compilation, since I don't have access to these compilers. 

- The next step will be to add a CMakeLists.txt into each "example" directory and build everything hierarchically. 

- I'm a novice in cmake. If someone of your has more experience (and I'm sure that there are plenty of people out there!), please have a look at my CMakeLists.txt and check if things can be made 
simpler or more elegantly.

- Any comment are as usual welcome.

Have fun,
Stefan
ELOG V3.1.4-2e1708b5