]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STARLIGHT/starlight/CMakeLists.txt
Update to trunk of hepforge
[u/mrichter/AliRoot.git] / STARLIGHT / starlight / CMakeLists.txt
CommitLineData
da32329d
AM
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:: 165 $: revision of last commit
24# $Author:: odjuvsla $: author of last commit
25# $Date:: 2013-10-06 16:18:10 +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
35cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
36
37
38# set verbosity
39set(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
44set (Starlight_VERSION_MAJOR 9999)
45set (Starlight_VERSION_MINOR 1)
46set (Starlight_VERSION_MINOR_MINOR 0)
47
48# define project
49project(starlight)
50find_package (Threads)
51
52
53# load some common cmake macros
54# set path, where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
55
56message(STATUS "Using cmake module path '${CMAKE_MODULE_PATH}'")
57set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_modules ${CMAKE_MODULE_PATH})
58message(STATUS "Using cmake module path '${CMAKE_MODULE_PATH}'")
59include(CommonMacros)
60
61
62# force out-of-source builds.
63enforce_out_of_source_build()
64
65
66# warn user if system is not UNIX
67if(NOT UNIX)
68 message(FATAL_ERROR "This is an unsupported system.")
69endif()
70message(STATUS "Detected host system '${CMAKE_HOST_SYSTEM_NAME}' version '${CMAKE_HOST_SYSTEM_VERSION}' architecture '${CMAKE_HOST_SYSTEM_PROCESSOR}'")
71message(STATUS "Compiling for system '${CMAKE_SYSTEM_NAME}' version '${CMAKE_SYSTEM_VERSION}' architecture '${CMAKE_SYSTEM_PROCESSOR}'")
72
73option (CPP11 "Enable compilation with C++11 features" OFF)
74
75# define build types
76# set a default build type for single-configuration CMake generators, if no build type is set.
77set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
78if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
79 message(STATUS "No build type was specified. Setting build type to 'Release'.")
80 set(CMAKE_BUILD_TYPE Release)
81endif()
82# common compiler flags
83if (CMAKE_COMPILER_IS_GNUCC)
84 execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
85 message(STATUS "GCC_VERSTION")
86 message(STATUS ${GCC_VERSION})
87 if (GCC_VERSION VERSION_GREATER 4.6 OR GCC_VERSION VERSION_EQUAL 4.6)
88 message(STATUS "GCC_VERSION>=4.6")
89 if(CPP11)
90 set(CMAKE_CXX_FLAGS "-Wall -Wextra -Werror -Wno-error=unused-but-set-variable -Wno-error=unused-but-set-parameter -std=c++11")
91 message(STATUS "Enabling usage of C++11 features")
92 else()
93 set(CMAKE_CXX_FLAGS "-Wall -Wextra -Werror -Wno-error=unused-but-set-variable -Wno-error=unused-but-set-parameter")
94 endif()
95 else()
96 message(STATUS "GCC_VERSION<4.6")
45d54d9a 97 set(CMAKE_CXX_FLAGS "-Wall -Wextra ")
da32329d
AM
98 if(CPP11)
99 message(WARNING "C++11 feautures not supported for your compiler")
100 endif()
101 endif()
102else()
103 message(STATUS "Not GCC")
45d54d9a 104 set(CMAKE_CXX_FLAGS "-Wall -Wextra")
da32329d
AM
105 if(CPP11)
106 message(WARNING "C++11 feautures not supported for your compiler")
107 endif()
108endif()
109# flags for specific build types
110set(CMAKE_CXX_FLAGS_DEBUG "-g")
111set(CMAKE_CXX_FLAGS_RELEASE "-O3")
112set(CMAKE_CXX_LDFLAGS_DEBUG "-g")
113# report global build settings
114message(STATUS "Using CXX compiler '${CMAKE_CXX_COMPILER}'")
115message(STATUS "Using CXX general compiler flags '${CMAKE_CXX_FLAGS}'")
116foreach(_BUILD_TYPE "DEBUG" "MINSIZEREL" "RELEASE" "RELWITHDEBINFO")
117 message(STATUS "Using CXX compiler flags '${CMAKE_CXX_FLAGS_${_BUILD_TYPE}}' for build type ${_BUILD_TYPE}")
118endforeach()
119message(STATUS "Build type is '${CMAKE_BUILD_TYPE}'")
120
121
122# redirect output files
123#set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/lib")
124message(STATUS "Using library output path '${LIBRARY_OUTPUT_PATH}'")
125#set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
126message(STATUS "Using executable output path '${EXECUTABLE_OUTPUT_PATH}'")
127
128
129# make CMAKE_SOURCE_DIR accessible in source code via predefined macro CMAKE_SOURCE_DIR
130if(CMAKE_SOURCE_DIR)
131 add_definitions(-D'CMAKE_SOURCE_DIR=\"${CMAKE_SOURCE_DIR}\"')
132else()
133 add_definitions(-D'CMAKE_SOURCE_DIR=\"\"')
134endif()
135
136
137# make SVN version string accessible in source code via predefined macro SVN_VERSION
138find_package(Subversion)
139if(Subversion_FOUND)
140 # unfortunately CMAKE only parses 'svn info'
141 find_program(SVNVERSION_EXECUTABLE
142 svnversion
143 )
144 if(NOT SVNVERSION_EXECUTABLE)
145 message(STATUS "Could not find subversion command 'svnversion'. Repository version unknown.")
146 else()
147 execute_process(
148 COMMAND ${SVNVERSION_EXECUTABLE} "${CMAKE_SOURCE_DIR}"
149 OUTPUT_VARIABLE SVN_VERSION
150 RESULT_VARIABLE _SVNVERSION_RETURN
151 OUTPUT_STRIP_TRAILING_WHITESPACE)
152 if(NOT ${_SVNVERSION_RETURN})
153 message(STATUS "Subversion repository revision is '${SVN_VERSION}'")
154 else()
155 message(STATUS "Error running 'svnversion'. Repository version unknown.")
156 set(SVN_VERSION "")
157 endif()
158 endif()
159else()
160 message(STATUS "Could not find subversion installation. Repository version unknown.")
161endif()
162if(SVN_VERSION)
163 add_definitions(-D'SVN_VERSION=\"${SVN_VERSION}\"')
164else()
165 add_definitions(-D'SVN_VERSION=\"\"')
166endif()
167
168
169# setup doxygen
170find_package(Doxygen)
171if(NOT DOXYGEN_FOUND)
172 message(WARNING "Cannot find Doxygen. No HTML documentation will be generated.")
173else()
174 set(DOXYGEN_TARGET "doxygen")
175 set(DOXYGEN_DOC_DIR "${CMAKE_SOURCE_DIR}/doxygen")
176 set(DOXYGEN_CONF "${CMAKE_SOURCE_DIR}/starlightDoxyfile.conf")
177 message(STATUS "Run 'make ${DOXYGEN_TARGET}' to create Doxygen documentation files in '${DOXYGEN_DOC_DIR}'")
178 add_custom_target(${DOXYGEN_TARGET}
179 COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_CONF}
180 DEPENDS ${DOXYGEN_CONF}
181 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
182 )
183endif()
184
185
186# setup Pythia 8
187option (ENABLE_PYTHIA "Enable compilation against pythia (necessary for certain processes)" OFF)
188if(ENABLE_PYTHIA)
189 find_package(Pythia8)
190 if(PYTHIA8_FOUND)
191 set(optionalLibs ${optionalLibs} ${PYTHIA8_LIBRARY})
192 find_package(LHAPDF REQUIRED) # implemented for dummy version in Pythia8
193 set(optionalLibs ${optionalLibs} ${LHAPDF_LIBRARIES})
194 option(ENABLE_PYTHIA "Should we use the Pythia8 library" ON)
195 else()
196 option(ENABLE_PYTHIA "Should we use the Pythia8 library" OFF)
197 endif()
198endif()
199
200# setup Pythia 6
201option (ENABLE_PYTHIA6 "Enable compilation against pythia 6 (necessary for certain processes)" OFF)
202if(ENABLE_PYTHIA6)
203 find_package(Pythia6 REQUIRED)
204 if(PYTHIA6_FOUND)
205 set(optionalLibs ${optionalLibs} ${PYTHIA6_LIBRARY})
206 option (ENABLE_PYTHIA6 "Enable compilation against pythia 6 (necessary for certain processes)" ON)
207 include_directories(pythia6)
208 else(PYTHIA6_FOUND)
209 option (ENABLE_PYTHIA6 "Enable compilation against pythia 6 (necessary for certain processes)" OFF)
210 endif(PYTHIA6_FOUND)
211endif()
212
213# setup DPMJET
214option (ENABLE_DPMJET "Enable compilation against DPMJet" OFF)
215if(ENABLE_DPMJET)
216 find_package(DPMJet REQUIRED)
217 if(DPMJET_FOUND)
218 option (ENABLE_DPMJET "Enable compilation against DPMJet" ON)
219 else(DPMJET_FOUND)
220 option (ENABLE_DPMJET "Enable compilation against DPMJet" OFF)
221 endif(DPMJET_FOUND)
222endif(ENABLE_DPMJET)
223
224# setup TStarLight
225option (ENABLE_TSTARLIGHT "Enable ROOT interface for Starlight" OFF)
226if(ENABLE_TSTARLIGHT)
227 find_package(ROOT REQUIRED)
228 set(TSTARLIGHT_DICTIONARY ${CMAKE_CURRENT_BINARY_DIR}/TStarLight_dict.cxx) # set dictionary path
229 root_generate_dictionary(
230 "${TSTARLIGHT_DICTIONARY}" # path to dictionary to generate
231 "${CMAKE_SOURCE_DIR}/TStarLight;${CMAKE_SOURCE_DIR}/include;${ROOT_INCLUDE_DIR};" # list of includes
232 "${CMAKE_SOURCE_DIR}/TStarLight/TStarLight.h" # list of classes to process
233 "${CMAKE_SOURCE_DIR}/TStarLight/TStarLightLinkDef.h" # ROOT linkDef file
234 )
235 set(SOURCES_SL TStarLight/TStarLight.cxx ${TSTARLIGHT_DICTIONARY}) # append dictionary to sources
236endif(ENABLE_TSTARLIGHT)
237
238# set include directories
239set(INCLUDE_DIRECTORIES
240 ${CMAKE_SOURCE_DIR}/include
241 ${PROJECT_BINARY_DIR}
242# ${PYTHIA8_INCLUDE_DIR}
243 )
244
245if(ENABLE_TSTARLIGHT)
246 set(INCLUDE_DIRECTORIES ${ROOT_INCLUDE_DIR} ${INCLUDE_DIRECTORIES})
247endif(ENABLE_TSTARLIGHT)
248
249include_directories(${INCLUDE_DIRECTORIES})
250
251# Set our source files, include the generated dictionary
252set(SOURCES
253 src/bessel.cpp
254 src/beam.cpp
255 src/inputParameters.cpp
256 src/beambeamsystem.cpp
257 src/starlightparticle.cpp
258 src/gammaaluminosity.cpp
259 src/randomgenerator.cpp
260 src/nucleus.cpp
261 src/eventchannel.cpp
262 src/gammaavm.cpp
263 src/psifamily.cpp
264 src/gammagammasingle.cpp
265 src/photonNucleusCrossSection.cpp
266 src/wideResonanceCrossSection.cpp
267 src/narrowResonanceCrossSection.cpp
268 src/readinluminosity.cpp
269 src/twophotonluminosity.cpp
270 src/gammagammaleptonpair.cpp
271 src/starlight.cpp
272 src/upcevent.cpp
273 src/vector3.cpp
274 src/lorentzvector.cpp
275 src/filewriter.cpp
276 src/eventfilewriter.cpp
277 src/starlightparticlecodes.cpp
278 src/starlightStandalone.cpp
279 src/nBodyPhaseSpaceGen.cpp
280 src/inputParser.cpp
281 src/incoherentPhotonNucleusLuminosity.cpp
282 src/incoherentVMCrossSection.cpp
283 )
284if(ENABLE_PYTHIA)
285 set (SOURCES
286 ${SOURCES}
287 #src/PythiaStarlight.cpp
288 src/pythiadecayer.cpp
289 )
290 include_directories(${PYTHIA8_INCLUDE_DIR})
291endif()
292if(ENABLE_PYTHIA6)
293 set (SOURCES
294 ${SOURCES}
295 src/starlightpythia.cpp
296 src/spectrum.cpp
297 src/spectrumprotonnucleus.cpp
298 )
299endif()
300if(ENABLE_DPMJET)
301 set (SOURCES
302 ${SOURCES}
303 src/starlightdpmjet.cpp
304 src/spectrum.cpp
305 src/spectrumprotonnucleus.cpp
306 )
307endif()
308
309# add Starlight library to the build system
310set(THIS_LIB "Starlib")
311add_library(${THIS_LIB} STATIC ${SOURCES})
312
313if(ENABLE_TSTARLIGHT)
314 ## build shared starlight library
315 set(THIS_LIB "StarLight")
316 add_library(${THIS_LIB} SHARED ${SOURCES})
317 include_directories(${INCLUDE_DIRECTORIES} ${CMAKE_SOURCE_DIR}/TStarLight ${ROOT_INCLUDE_DIR})
318 add_library(TStarLight SHARED ${SOURCES_SL})
319endif(ENABLE_TSTARLIGHT)
320
321#make_shared_library("${THIS_LIB}" "${SOURCES}"
322# "${PYTHIA8_LIBRARY}"
323# "${LHAPDF_LIBRARIES}"
324#)
325
326if(ENABLE_DPMJET)
327 enable_language(Fortran)
328 set(DPMJET_LIB "DpmJetLib")
329 message(STATUS "DPMJet objects: ${DPMJET_OBJECTS}")
330 add_library(${DPMJET_LIB} STATIC dpmjet/dpmjetint.f ${DPMJET_OBJECTS})
331 set(optionalLibs ${optionalLibs} ${DPMJET_LIB})
332endif()
333
334if(ENABLE_PYTHIA6)
335 enable_language(Fortran)
336endif()
337
338# add starlight executable to the build system
339add_executable(starlight src/main.cpp)
340#target_link_libraries(starlight Starlib ${PYTHIA8_LIBRARY} ${LHAPDF_LIBRARIES} ${PYTHIA6_LIBRARY} ${DPMJET_LIB} )
341target_link_libraries(starlight Starlib ${optionalLibs} ${CMAKE_THREAD_LIBS_INIT})
342
343#make_executable(starlight src/main.cpp ${THIS_LIB})
344
345configure_file (
346 "${PROJECT_SOURCE_DIR}/starlightconfig.h.in"
347 "${PROJECT_BINARY_DIR}/starlightconfig.h"
348 )
349# Erase xsec values in case changes in code affects the xsec, executed during make process
350add_custom_command (TARGET Starlib POST_BUILD COMMAND touch ARGS slight.txt)
351add_custom_command (TARGET Starlib POST_BUILD COMMAND cp ARGS slight.txt slight.txt.bak)
352add_custom_command (TARGET Starlib POST_BUILD COMMAND echo ARGS '' > slight.txt )
353
354
355message(STATUS "Cmake did not find any errors. run 'make' to build the project.")
356message(STATUS "On multi-core machines 'make -j#', where # is the number of parallel jobs, can speedup compilation considerably.")