]>
Commit | Line | Data |
---|---|---|
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) | |
31 | set(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}) | |
42 | include_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 | # ) | |
54 | include_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 | # ) | |
65 | set(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 | |
76 | string(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 | |
91 | get_directory_property(incdirs INCLUDE_DIRECTORIES) | |
92 | generate_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 | |
109 | set(ROOT_DEPENDENCIES) | |
110 | set(ALIROOT_DEPENDENCIES) | |
111 | ||
112 | # Generating the ROOT map | |
113 | # - If you are not sure how to proceed please contact aliroot-git-admins@cern.ch | |
114 | set(LIBDEPS ${ROOT_DEPENDENCIES} ${ALIROOT_DEPENDENCIES}) | |
115 | generate_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 | |
157 | set(MODULE_COMPILE_FLAGS ) | |
158 | set(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 | |
186 | add_library(${MODULE} SHARED ${SRCS} G__${MODULE}.cxx) | |
187 | ||
188 | # Additional compilation flags | |
189 | set_target_properties(${MODULE} PROPERTIES COMPILE_FLAGS ${MODULE_COMPILE_FLAGS}) | |
190 | ||
191 | # Additional linking flags | |
192 | set_target_properties(${MODULE} PROPERTIES LINK_FLAGS ${MODULE_LINK_FLAGS}) | |
193 | ||
194 | # Link library to dependecies | |
195 | target_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 | |
210 | add_library(${MODULE}-object OBJECT ${SRCS} G__${MODULE}.cxx) | |
211 | ||
212 | # - Add a library to the project using the object | |
213 | add_library(${MODULE} SHARED $<TARGET_OBJECTS:${MODULE}-object>) | |
214 | ||
215 | # Setting the correct headers for the object as gathered from the dependencies | |
216 | target_include_directories(${MODULE}-object PUBLIC $<TARGET_PROPERTY:${MODULE},INCLUDE_DIRECTORIES>) | |
217 | set_target_properties(${MODULE}-object PROPERTIES COMPILE_DEFINITIONS $<TARGET_PROPERTY:${MODULE},COMPILE_DEFINITIONS>) | |
218 | ||
219 | # Additional compilation flags | |
220 | set_target_properties(${MODULE}-object PROPERTIES COMPILE_FLAGS "") | |
221 | ||
222 | # Additional linking flags | |
223 | set_target_properties(${MODULE} PROPERTIES LINK_FLAGS ${MODULE_LINK_FLAGS}) | |
224 | ||
225 | # Link library to dependecies | |
226 | target_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 | |
230 | if(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) | |
247 | endif(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 | |
267 | install(TARGETS ${MODULE} | |
268 | ARCHIVE DESTINATION lib | |
269 | LIBRARY DESTINATION lib) | |
270 | ||
271 | # Header installation into $CMAKE_INSTALL_PREFIX/include | |
272 | install(FILES ${HDRS} DESTINATION include) | |
273 | ||
274 | # Macros installation | |
275 | install(DIRECTORY macros DESTINATION ${MODULE}) |