Changes for Root6 (Mikolaj)
[u/mrichter/AliRoot.git] / cmake / CMakeLists.example
CommitLineData
6cb9cec0 1# **************************************************************************
2# * Copyright(c) 1998-2015, ALICE Experiment at CERN, All rights reserved. *
3# * *
4# * Author: The ALICE Off-line Project. *
5# * Contributors are mentioned in the code where appropriate. *
6# * *
7# * Permission to use, copy, modify and distribute this software and its *
8# * documentation strictly for non-commercial purposes is hereby granted *
9# * without fee, provided that the above copyright notice appears in all *
10# * copies and that both the copyright notice and this permission notice *
11# * appear in the supporting documentation. The authors make no claims *
12# * about the suitability of this software for any purpose. It is *
13# * provided "as is" without express or implied warranty. *
14# **************************************************************************
15
16############################################################################
17# GENERAL SETTINGS #
18############################################################################
19
20# CMake configuration is controlled through CMakeLists files.
21# - Normally a single CMakeLists files should contain a single target/library.
22# - The file below tries to offer a standard format for generating libraries
23# but full access to cmake functions and utilities is possible.
24# - For any customization please use instructions provided by the minum cmake
25# version 2.8.11
26# http://www.cmake.org/cmake/help/v2.8.11/cmake.html
27
28# Module name
29# Module name translates into library name
30# Ex: set(MODULE ANALYSIS)
31set(MODULE ModuleNameExample)
32
33# Module include folder
34# - Add here all include folders containing headers that belong
35# to this module.
36# - Do not add dependencies here
37# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
38# For more information about include_directories please read
39# documentation for minimum required version:
40# http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:include_directories
41# Ex: include_directories(${AliRoot_SOURCE_DIR}/ANALYS/${MODULE})
42include_directories()
43
44# Additional include folders in alphabetical order except ROOT
45# - ROOT include folders are added by the FindROOT macro
46# - To remove compilation warnings related to dependencies headers
47# please add them as SYSTEM headers.
48# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
49# For more information about include_directories please read
50# documentation for minimum required version:
51# http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:include_directories
52# Ex: include_directories(${AliRoot_SOURCE_DIR}/STEER/STEERBase
53# )
54include_directories(
55 )
56
57# Library sources in alphabetical order
58# - Only these sources will be added to the library
59# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
60# Ex:
61#set(SRCS
62# AliAnalysisDataContainer.cxx
63# AliAnalysisDataSlot.cxx
64# )
65set(SRCS
66 )
67
68# Headers generated from sources list
69# - This list is used mainly during dictionary generating and installation step,
70# all source headers will be installed into $CMAKE_INSTALL_PREFIX/include
71# - Note that it is possible to create your own custom list of headers, to add
72# to the existing one or to delete from it. Change this variable as it suits
73# the purpose of the library, but be sure you do not affect the dictionary
74# generation
75# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
76string(REPLACE ".cxx" ".h" HDRS "${SRCS}")
77
09a287ab 78# Additional headers, with no corresponding sources
79# - Instead of adding headers to the HDRS variable with the string(REPLACE)
80# command above, you can use a separate list
81# - With this optional command, headers are appended to the HDRS list
82# - Those headers will be installed in the include directory during the
83# installation process
84#list(APPEND HDRS "header1.h" "header2.h" "header3.h")
85
6cb9cec0 86# Generating the dictionary
87# - The name of the LinkDef has to be "${MODULE}LinkDef.h"
88# - Using custom LinkDef names is for advanced users! If you are not sure
89# how to generate the dictionary please contact aliroot-git-admins@cern.ch
90# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
91get_directory_property(incdirs INCLUDE_DIRECTORIES)
92generate_dictionary("${MODULE}" "${MODULE}LinkDef.h" "${HDRS}" "${incdirs}")
93# End Generation the dictionary
94
95# Seting ROOT and AliRoot dependecies
96# - Any ROOT symbols used in the current sources has to be added to the list of
97# dependecies.
98# - The mapping between ROOT symbols and libraries can be found inside the ROOT
99# map files. If you are not sure which library contains a certain symbol grep
100# the rootmap files for the symbol:
101# Ex:
102# $ cd $ROOTSYS/lib
103# $ grep TSelectorCint *.rootmap
104# libTree.rootmap:Library.TSelectorCint: libTree.so libNet.so libRIO.so libThread.so
105# TSelectorCint symbol belongs to Tree library and we add it to ROOT_DEPENDENCIES
106# Ex: set(ROOT_DEPENDENCIES Core Gpad Hist Net RIO Tree XMLParser)
107# Ex: set(ALIROOT_DEPENDENCIES STEERBase ANALYSIS)
108# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
109set(ROOT_DEPENDENCIES)
110set(ALIROOT_DEPENDENCIES)
111
112# Generating the ROOT map
113# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
114set(LIBDEPS ${ROOT_DEPENDENCIES} ${ALIROOT_DEPENDENCIES})
115generate_rootmap("${MODULE}" "${LIBDEPS}" "${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}LinkDef.h")
116# End Generating the ROOT map
117
38e694ab 118# Generate a PARfile target for this library
119# - This command tells CMake to generate a target that, in turn, will generate a PARfile
120# - With a PARfile it's possible to override an AliRoot/AliPhysics library with our modified
121# version
122# - This "hotpatching" is useful if we want to test local modifications e.g. on the Grid without
123# pushing our commits
124# - There is a 1:1 correspondence between a library (e.g. libMODULE.so) and a PARfile
125# (e.g. MODULE.par): if we load remotely a PARfile for a certain library, we are going to
126# override only that library
127# - This command only generates a target: PARfiles are not generated automatically. If a library
128# is PARfile-enabled (condition achieved by using the command below), then the PARfile can be
129# created by:
130# cd <aliroot_build_dir> # e.g. cd $ALICE_ROOT/../build
131# make MODULE.par
132# make install
133# The file MODULE.par will be found in $ALICE_ROOT/PARfiles/MODULE.par
134# - It is also possible to specify another string after "${LIBDEPS}", an optional parameter to tell
135# the PARfile that extra include paths (both relative to the current directory and absolute) are
136# needed in order to build the corresponding library
137#add_target_parfile(${MODULE} "${SRCS}" "${HDRS}" "${MODULE}LinkDef.h" "${LIBDEPS}")
138# End Generate a PARfile target for this library
139
6cb9cec0 140############################################################################
141# END GENERAL SETTINGS #
142############################################################################
143
144
145############################################################################
146# COMPILATION AND LINKING CUSTOM FLAGS #
147############################################################################
148
149# Setting custom compilation and linking flags
150# Ex system dependent: Modify the way the library is build
151# if(${CMAKE_SYSTEM} MATCHES Darwin)
152# set(MODULE_LINK_FLAGS "-undefined dynamic_lookup")
153# endif(${CMAKE_SYSTEM} MATCHES Darwin)
154# - MODULE_COMPILE_FLAGS and MODULE_LINK_FLAGS will be used later for library
155# generation
156# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
157set(MODULE_COMPILE_FLAGS )
158set(MODULE_LINK_FLAGS )
159
160############################################################################
161# END COMPILATION AND LINKING CUSTOM FLAGS #
162############################################################################
163
164
165############################################################################
166# LIBRARY CREATION #
167############################################################################
168
169# Two options are availabe when creating the libraries:
170# - dynamic only libraries
171# - dinamic and static libraries
172# Static libraries are by used the DAs. If you are sure the library will
173# be used by the DAs it is mandatory to create the static version.
174# - Use only one of the options at a time, DO NOT FORGET to delete the content
175# that is not used
176
177############################################################################
178## 1. DYNAMIC LIBRARY CREATION - NO STATIC LIBRARY NEEDED #
179############################################################################
180
181# Create the dynamic library
182# - DELETE if static libraries are neded and follow Dynamic/Static libraries
183# instructions
184# - DELETE the dynamic/static block if only dynamic libraries are needed
185# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
186add_library(${MODULE} SHARED ${SRCS} G__${MODULE}.cxx)
187
188# Additional compilation flags
189set_target_properties(${MODULE} PROPERTIES COMPILE_FLAGS ${MODULE_COMPILE_FLAGS})
190
191# Additional linking flags
192set_target_properties(${MODULE} PROPERTIES LINK_FLAGS ${MODULE_LINK_FLAGS})
193
194# Link library to dependecies
195target_link_libraries(${MODULE} ${LIBDEPS})
196
197############################################################################
198## END DYNAMIC LIBRARY CREATION - NO STATIC LIBRARY NEEDED #
199############################################################################
200
201
202############################################################################
203## 2. DYNAMIC/STATIC LIBRARY CREATION #
204############################################################################
205
206# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
207# - DELETE if no static libraries are needed
208# - Create an object to be reused in case of static libraries
209# otherwise the sources will be compiled twice
210add_library(${MODULE}-object OBJECT ${SRCS} G__${MODULE}.cxx)
211
212# - Add a library to the project using the object
213add_library(${MODULE} SHARED $<TARGET_OBJECTS:${MODULE}-object>)
214
215# Setting the correct headers for the object as gathered from the dependencies
216target_include_directories(${MODULE}-object PUBLIC $<TARGET_PROPERTY:${MODULE},INCLUDE_DIRECTORIES>)
217set_target_properties(${MODULE}-object PROPERTIES COMPILE_DEFINITIONS $<TARGET_PROPERTY:${MODULE},COMPILE_DEFINITIONS>)
218
219# Additional compilation flags
220set_target_properties(${MODULE}-object PROPERTIES COMPILE_FLAGS "")
221
222# Additional linking flags
223set_target_properties(${MODULE} PROPERTIES LINK_FLAGS ${MODULE_LINK_FLAGS})
224
225# Link library to dependecies
226target_link_libraries(${MODULE} ${LIBDEPS})
227
228# Create the static library only if ALIROOT_STATIC variable is set
229# ALIROOT_STATIC is automatically set by the DA flag
230if(ALIROOT_STATIC)
231 add_library(${MODULE}-static STATIC $<TARGET_OBJECTS:${MODULE}-object>)
232 set_target_properties(${MODULE}-static PROPERTIES OUTPUT_NAME ${MODULE})
233
234 # list of shared dependencies / the name of the variable containing the list of static ones
235 generate_static_dependencies("${ALIROOT_DEPENDENCIES}" "STATIC_ALIROOT_DEPENDENCIES")
236 target_link_libraries(${MODULE}-static ${STATIC_ALIROOT_DEPENDENCIES} Root RootExtra)
237
238 # Public include folders that will be propagated to the dependecies
239 target_include_directories(${MODULE}-static PUBLIC ${incdirs})
240
241 set_target_properties(${MODULE}-static PROPERTIES LINK_FLAGS "-Wl,--whole-archive")
242
243 # Installation
244 install(TARGETS ${MODULE}-static
245 ARCHIVE DESTINATION lib
246 LIBRARY DESTINATION lib)
247endif(ALIROOT_STATIC)
248
249############################################################################
250## END DYNAMIC/STATIC LIBRARY CREATION #
251############################################################################
252
253############################################################################
254# END LIBRARY CREATION #
255############################################################################
256
257############################################################################
258# INSTALLATION #
259############################################################################
260
261# The installation step is copying files needed at runtime into CMAKE_INSTALL_PREFIX
262# DO NOT forget to install all macros needed to run Grid jobs or any files that are
263# needed as input.
264# - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch
265
266# Library installation into $CMAKE_INSTALL_PREFIX/lib
267install(TARGETS ${MODULE}
268 ARCHIVE DESTINATION lib
269 LIBRARY DESTINATION lib)
270
271# Header installation into $CMAKE_INSTALL_PREFIX/include
272install(FILES ${HDRS} DESTINATION include)
273
274# Macros installation
275install(DIRECTORY macros DESTINATION ${MODULE})