Switching from CMAKE_SOURCE_DIR to AliRoot_SOURCE_DIR
[u/mrichter/AliRoot.git] / STARLIGHT / starlight / CMakeLists.txt
1 ###########################################################################
2 #
3 #    Copyright 2010
4 #
5 #    This file is part of Starlight.
6 #
7 #    Starlight is free software: you can redistribute it and/or modify
8 #    it under the terms of the GNU General Public License as published by
9 #    the Free Software Foundation, either version 3 of the License, or
10 #    (at your option) any later version.
11 #         
12 #    Starlight is distributed in the hope that it will be useful,
13 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 #    GNU General Public License for more details.
16 #         
17 #    You should have received a copy of the GNU General Public License
18 #    along with Starlight. If not, see <http://www.gnu.org/licenses/>.
19 #
20 ###########################################################################
21 #
22 # File and Version Information:
23 # $Rev:: 186                         $: revision of last commit
24 # $Author:: jnystrand                $: author of last commit
25 # $Date:: 2014-09-12 02:39:02 +0200 #$: date of last commit
26 #
27 # Description:
28 #      Starlight build file
29 #
30 #
31 ###########################################################################
32
33
34 # check if cmake has the required version
35 cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
36
37
38 # set verbosity
39 set(CMAKE_VERBOSE_MAKEFILE 0)  # if set to 1 compile and link commands are displayed during build
40 # the same effect can be achieved by calling 'make VERBOSE=1'
41
42
43 # The version number. 9999 indicates trunk
44 set (Starlight_VERSION_MAJOR 9999) 
45 set (Starlight_VERSION_MINOR 1)
46 set (Starlight_VERSION_MINOR_MINOR 0)
47
48 # define project
49 project(starlight)
50 find_package (Threads)
51
52 # load some common cmake macros
53 # set path, where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
54 set(CMAKE_MODULE_PATH "${AliRoot_SOURCE_DIR}/cmake_modules")
55 message(STATUS "Using cmake module path '${CMAKE_MODULE_PATH}'")
56 include(CommonMacros)
57
58
59 # force out-of-source builds.
60 enforce_out_of_source_build()
61
62
63 # warn user if system is not UNIX
64 if(NOT UNIX)
65   message(FATAL_ERROR "This is an unsupported system.")
66 endif()
67 message(STATUS "Detected host system '${CMAKE_HOST_SYSTEM_NAME}' version '${CMAKE_HOST_SYSTEM_VERSION}' architecture '${CMAKE_HOST_SYSTEM_PROCESSOR}'")
68 message(STATUS "Compiling for system '${CMAKE_SYSTEM_NAME}' version '${CMAKE_SYSTEM_VERSION}' architecture '${CMAKE_SYSTEM_PROCESSOR}'")
69
70 option (CPP11 "Enable compilation with C++11 features" OFF) 
71
72 # define build types
73 # set a default build type for single-configuration CMake generators, if no build type is set.
74 set(CMAKE_BUILD_TYPE Debug)
75 if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
76   message(STATUS "No build type was specified. Setting build type to 'Release'.")
77   set(CMAKE_BUILD_TYPE Release)
78 endif()
79 # common compiler flags
80 if (CMAKE_COMPILER_IS_GNUCC)
81   execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
82   message(STATUS "GCC_VERSTION")
83   message(STATUS  ${GCC_VERSION})
84   if (GCC_VERSION VERSION_GREATER 4.6 OR GCC_VERSION VERSION_EQUAL 4.6)
85     message(STATUS "GCC_VERSION>=4.6")
86     if(CPP11)
87       set(CMAKE_CXX_FLAGS "-Wall -Wextra -Werror -Wno-error=unused-but-set-variable -Wno-error=unused-but-set-parameter -std=c++11")
88       message(STATUS "Enabling usage of C++11 features")
89     else()
90       set(CMAKE_CXX_FLAGS "-Wall -Wextra -Werror -Wno-error=unused-but-set-variable -Wno-error=unused-but-set-parameter")
91     endif()
92   else()
93     message(STATUS "GCC_VERSION<4.6")
94     set(CMAKE_CXX_FLAGS "-Wall -Wextra -Werror")
95     if(CPP11)
96       message(WARNING "C++11 feautures not supported for your compiler")
97     endif()
98   endif()
99 else()
100   message(STATUS "Not GCC")
101   set(CMAKE_CXX_FLAGS "-Wall -Wextra -Werror")
102   if(CPP11)
103     message(WARNING "C++11 feautures not supported for your compiler")
104   endif()
105 endif()
106 # flags for specific build types
107 set(CMAKE_CXX_FLAGS_DEBUG "-g")
108 set(CMAKE_CXX_FLAGS_RELEASE "-O3")
109 set(CMAKE_CXX_LDFLAGS_DEBUG "-g")
110 # report global build settings
111 message(STATUS "Using CXX compiler '${CMAKE_CXX_COMPILER}'")
112 message(STATUS "Using CXX general compiler flags '${CMAKE_CXX_FLAGS}'")
113 foreach(_BUILD_TYPE "DEBUG" "MINSIZEREL" "RELEASE" "RELWITHDEBINFO")
114   message(STATUS "Using CXX compiler flags '${CMAKE_CXX_FLAGS_${_BUILD_TYPE}}' for build type ${_BUILD_TYPE}")
115 endforeach()
116 message(STATUS "Build type is '${CMAKE_BUILD_TYPE}'")
117
118
119 # redirect output files
120 #set(LIBRARY_OUTPUT_PATH "${AliRoot_SOURCE_DIR}/lib")
121 message(STATUS "Using library output path '${LIBRARY_OUTPUT_PATH}'")
122 #set(EXECUTABLE_OUTPUT_PATH "${AliRoot_SOURCE_DIR}/bin")
123 message(STATUS "Using executable output path '${EXECUTABLE_OUTPUT_PATH}'")
124
125
126 # make AliRoot_SOURCE_DIR accessible in source code via predefined macro AliRoot_SOURCE_DIR
127 if(AliRoot_SOURCE_DIR)
128   add_definitions(-D'AliRoot_SOURCE_DIR=\"${AliRoot_SOURCE_DIR}\"')
129 else()
130   add_definitions(-D'AliRoot_SOURCE_DIR=\"\"')
131 endif()
132
133
134 # make SVN version string accessible in source code via predefined macro SVN_VERSION
135 find_package(Subversion)
136 if(Subversion_FOUND)
137   # unfortunately CMAKE only parses 'svn info'
138   find_program(SVNVERSION_EXECUTABLE
139     svnversion
140                 )
141   if(NOT SVNVERSION_EXECUTABLE)
142     message(STATUS "Could not find subversion command 'svnversion'. Repository version unknown.")
143   else()
144     execute_process(
145       COMMAND ${SVNVERSION_EXECUTABLE} "${AliRoot_SOURCE_DIR}"
146       OUTPUT_VARIABLE SVN_VERSION
147       RESULT_VARIABLE _SVNVERSION_RETURN
148       OUTPUT_STRIP_TRAILING_WHITESPACE)
149     if(NOT ${_SVNVERSION_RETURN})
150       message(STATUS "Subversion repository revision is '${SVN_VERSION}'")
151     else()
152       message(STATUS "Error running 'svnversion'. Repository version unknown.")
153       set(SVN_VERSION "")
154     endif()
155   endif()
156 else()
157   message(STATUS "Could not find subversion installation. Repository version unknown.")
158 endif()
159 if(SVN_VERSION)
160   add_definitions(-D'SVN_VERSION=\"${SVN_VERSION}\"')
161 else()
162   add_definitions(-D'SVN_VERSION=\"\"')
163 endif()
164
165
166 # setup doxygen
167 find_package(Doxygen)
168 if(NOT DOXYGEN_FOUND)
169   message(WARNING "Cannot find Doxygen. No HTML documentation will be generated.")
170 else()
171   set(DOXYGEN_TARGET  "doxygen")
172   set(DOXYGEN_DOC_DIR "${AliRoot_SOURCE_DIR}/doxygen")
173   set(DOXYGEN_CONF    "${AliRoot_SOURCE_DIR}/starlightDoxyfile.conf")
174   message(STATUS "Run 'make ${DOXYGEN_TARGET}' to create Doxygen documentation files in '${DOXYGEN_DOC_DIR}'")
175   add_custom_target(${DOXYGEN_TARGET}
176     COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_CONF}
177     DEPENDS ${DOXYGEN_CONF}
178     WORKING_DIRECTORY ${AliRoot_SOURCE_DIR}
179                 )
180 endif()
181
182
183 # setup Pythia 8
184 option (ENABLE_PYTHIA  "Enable compilation against pythia (necessary for certain processes)" OFF) 
185 if(ENABLE_PYTHIA)
186   find_package(Pythia8)
187   if(PYTHIA8_FOUND)
188     set(optionalLibs ${optionalLibs} ${PYTHIA8_LIBRARY})
189     find_package(LHAPDF REQUIRED) # implemented for dummy version in Pythia8
190     set(optionalLibs ${optionalLibs} ${LHAPDF_LIBRARIES})
191     option(ENABLE_PYTHIA  "Should we use the Pythia8 library" ON) 
192   else() 
193     option(ENABLE_PYTHIA  "Should we use the Pythia8 library" OFF) 
194   endif()
195 endif()
196
197 # setup Pythia 6
198 option (ENABLE_PYTHIA6  "Enable compilation against pythia 6 (necessary for certain processes)" OFF) 
199 if(ENABLE_PYTHIA6)
200    find_package(Pythia6 REQUIRED)
201    if(PYTHIA6_FOUND)
202       set(optionalLibs ${optionalLibs} ${PYTHIA6_LIBRARY})
203       option (ENABLE_PYTHIA6  "Enable compilation against pythia 6 (necessary for certain processes)" ON) 
204       include_directories(pythia6)
205    else(PYTHIA6_FOUND) 
206       option (ENABLE_PYTHIA6  "Enable compilation against pythia 6 (necessary for certain processes)" OFF) 
207    endif(PYTHIA6_FOUND)
208 endif()
209
210 # setup DPMJET
211 option (ENABLE_DPMJET  "Enable compilation against DPMJet" OFF)
212 if(ENABLE_DPMJET)
213    find_package(DPMJet REQUIRED)
214    if(DPMJET_FOUND)
215       option (ENABLE_DPMJET  "Enable compilation against DPMJet" ON)       
216    else(DPMJET_FOUND)
217       option (ENABLE_DPMJET  "Enable compilation against DPMJet" OFF)
218    endif(DPMJET_FOUND)
219  endif(ENABLE_DPMJET)
220
221
222 # set include directories
223 set(INCLUDE_DIRECTORIES
224         ${AliRoot_SOURCE_DIR}/include
225         ${PROJECT_BINARY_DIR}
226 #       ${PYTHIA8_INCLUDE_DIR}
227         )
228 include_directories(${INCLUDE_DIRECTORIES})
229
230 # Set our source files, include the generated dictionary
231 set(SOURCES
232   src/bessel.cpp
233   src/beam.cpp
234   src/inputParameters.cpp
235   src/beambeamsystem.cpp
236   src/starlightparticle.cpp
237   src/gammaaluminosity.cpp
238   src/randomgenerator.cpp
239   src/nucleus.cpp
240   src/eventchannel.cpp
241   src/gammaavm.cpp
242   src/gammagammasingle.cpp
243   src/photonNucleusCrossSection.cpp
244   src/wideResonanceCrossSection.cpp
245   src/narrowResonanceCrossSection.cpp
246   src/readinluminosity.cpp
247   src/twophotonluminosity.cpp
248   src/gammagammaleptonpair.cpp
249   src/starlight.cpp
250   src/upcevent.cpp
251   src/vector3.cpp
252   src/lorentzvector.cpp
253   src/filewriter.cpp
254   src/eventfilewriter.cpp
255   src/starlightparticlecodes.cpp
256   src/starlightStandalone.cpp
257   src/nBodyPhaseSpaceGen.cpp
258   src/inputParser.cpp
259   src/incoherentPhotonNucleusLuminosity.cpp
260   src/incoherentVMCrossSection.cpp
261   )
262 if(ENABLE_PYTHIA) 
263   set (SOURCES
264                 ${SOURCES}
265                 #src/PythiaStarlight.cpp
266                 src/pythiadecayer.cpp
267                 )
268   include_directories(${PYTHIA8_INCLUDE_DIR})
269 endif()
270 if(ENABLE_PYTHIA6)
271   set (SOURCES 
272                 ${SOURCES}
273                 src/starlightpythia.cpp
274                 src/spectrum.cpp
275                 src/spectrumprotonnucleus.cpp
276                 )
277 endif()
278 if(ENABLE_DPMJET)
279   set (SOURCES 
280                 ${SOURCES}
281                 src/starlightdpmjet.cpp
282                 src/spectrum.cpp
283                 src/spectrumprotonnucleus.cpp
284                 )
285 endif()
286
287 # add Starlight library to the build system
288 set(THIS_LIB "Starlib")
289 add_library(${THIS_LIB} STATIC ${SOURCES})
290 #make_shared_library("${THIS_LIB}" "${SOURCES}"
291 #       "${PYTHIA8_LIBRARY}"
292 #       "${LHAPDF_LIBRARIES}"
293 #)
294
295 if(ENABLE_DPMJET)
296   enable_language(Fortran)
297   set(DPMJET_LIB "DpmJetLib")
298   message(STATUS "DPMJet objects: ${DPMJET_OBJECTS}")
299   add_library(${DPMJET_LIB} STATIC dpmjet/dpmjetint.f ${DPMJET_OBJECTS})
300   set(optionalLibs ${optionalLibs} ${DPMJET_LIB})
301
302 endif()
303
304 if(ENABLE_PYTHIA6)
305   enable_language(Fortran)
306 endif()
307
308 # add starlight executable to the build system
309 add_executable(starlight src/main.cpp)
310 #target_link_libraries(starlight Starlib ${PYTHIA8_LIBRARY} ${LHAPDF_LIBRARIES} ${PYTHIA6_LIBRARY} ${DPMJET_LIB} )
311 target_link_libraries(starlight Starlib ${optionalLibs} ${CMAKE_THREAD_LIBS_INIT}) 
312
313 #make_executable(starlight src/main.cpp ${THIS_LIB})
314
315 configure_file (
316   "${PROJECT_SOURCE_DIR}/starlightconfig.h.in"
317   "${PROJECT_BINARY_DIR}/starlightconfig.h"
318   )
319 # Erase xsec values in case changes in code affects the xsec, executed during make process
320 add_custom_command (TARGET Starlib POST_BUILD COMMAND touch ARGS slight.txt)
321 add_custom_command (TARGET Starlib POST_BUILD COMMAND cp ARGS slight.txt slight.txt.bak)
322 add_custom_command (TARGET Starlib POST_BUILD COMMAND echo ARGS '' > slight.txt )
323
324
325 message(STATUS "Cmake did not find any errors. run 'make' to build the project.")
326 message(STATUS "On multi-core machines 'make -j#', where # is the number of parallel jobs, can speedup compilation considerably.")