1 cmake_minimum_required(VERSION 2.8.2 FATAL_ERROR)
3 # -----------Utilities--------------------
6 set(ONLINEDETECTORS SPD SDD SSD TPC TRD TOF HMP PHS CPV PMD MCH MTR FMD T00 V00 ZDC ACO TRI EMC HLT TST GRP)
8 function(expand output input)
9 string(REGEX MATCH "\\\${[^}]*}" m "${input}")
11 string(REGEX REPLACE "\\\${(.*)}" "\\1" v "${m}")
12 string(REPLACE "\${${v}}" "${${v}}" input "${input}")
13 string(REGEX MATCH "\\\${[^}]*}" m "${input}")
15 set("${output}" "${input}" PARENT_SCOPE)
18 #function to get module for detector
19 function (detector_module _module detector)
20 #Map of online detectors to DA in pairs of ONLINEDETECTORNAME DAMODULE
21 set (DETECTORMODULEMAP SPD ITS SDD ITS SSD ITS HMP HMPID PHS PHOS CPV PHOS MCH MUON MTR MUON T00 T0 V00 VZERO ACO ACORDE EMC EMCAL)
22 list(FIND DETECTORMODULEMAP ${detector} _index)
23 if(_index STREQUAL "-1")
24 set(${_module} "${detector}" PARENT_SCOPE)
26 math(EXPR _index "${_index}+1")
27 list(GET DETECTORMODULEMAP ${_index} _index)
28 set(${_module} ${_index} PARENT_SCOPE)
29 endif(_index STREQUAL "-1")
32 #function to get subDA for detector
33 function (detector_subda _subda detector)
34 #Map of online detectors to SUBDAMODULE in pairs of ONLINEDETECTORNAME SUBDAMODULE
35 set (DETECTORSUBDAMAP SPD SPD SDD SDD SSD SSD CPV CPV MCH TRK MTR TRG)
36 list(FIND DETECTORSUBDAMAP ${detector} _index)
37 if(_index STREQUAL "-1")
38 set(${_subda} "" PARENT_SCOPE)
40 math(EXPR _index "${_index}+1")
41 list(GET DETECTORSUBDAMAP ${_index} _index)
42 set(${_subda} ${_index} PARENT_SCOPE)
43 endif(_index STREQUAL "-1")
46 #function to extract info
47 function (getinfo _info pattern file)
48 string(REGEX MATCH "${pattern}:[^\n]*" _match ${file})
50 string(REGEX REPLACE "${pattern}:[ ]*" "" _data ${_match})
52 set(${_info} ${_data} PARENT_SCOPE)
55 # ----------Common stuff-------------------
57 file(GLOB_RECURSE _dafiles $ENV{ALICE_ROOT}/*da.cxx)
58 set(DAINSTALL "$ENV{ALICE_INSTALL}/DA")
60 file(MAKE_DIRECTORY ${DAINSTALL})
62 string (REPLACE "-pedantic-errors" "" CXXFLAGS ${CXXFLAGS})
64 find_program(XML2 xml2-config)
68 set(CXXFLAGS "${CXXFLAGS} ${AMOREFLAGS}")
69 set(CFLAGS "${CFLAGS} ${AMOREFLAGS}")
70 set(CINTFLAGS "${CINTFLAGS} ${AMOREFLAGS}")
75 execute_process(COMMAND ${XML2} --libs OUTPUT_VARIABLE _xml2libs OUTPUT_STRIP_TRAILING_WHITESPACE)
76 execute_process(COMMAND ${DATE_CONFIG} --monitorlibs=noshift OUTPUT_VARIABLE MONITORLIBS OUTPUT_STRIP_TRAILING_WHITESPACE)
78 separate_arguments(MONITORLIBS)
80 set(SYSLIBS -ldl -lpthread ${_xml2libs})
83 set(EXTRAROOTLIB "libRootExtra.a")
85 file(GLOB _extraroot "$ENV{ROOTSYS}/montercarlo/vmc/src/*.o" "$ENV{ROOTSYS}/tree/treeplayer/src/*.o" "$ENV{ROOTSYS}/io/xmlparser/src/*.o" "$ENV{ROOTSYS}/math/minuit2/src/*.o")
87 add_library(${EXTRAROOTLIB} STATIC ${_extraroot})
88 set_target_properties(${EXTRAROOTLIB} PROPERTIES LINKER_LANGUAGE CXX)
90 set(DAQDALIB_PATH $ENV{DAQDALIB_PATH})
92 set(DAQDADIR "${DAQDALIB_PATH}")
94 set(DAQDADIR "$ENV{ALICE}/daqDAlib")
96 set(DAQDALIB "${DAQDADIR}/libdaqDA.a")
98 include_directories(${DAQDADIR} RAW include STEER)
99 include_directories(SYSTEM ${ROOTINCDIR})
101 # ----------Create All Valid targets---------
103 foreach(detector ${ONLINEDETECTORS} )
105 set(ONLINEDETECTORNAME ${detector})
107 detector_module(DAMODULE ${ONLINEDETECTORNAME})
109 detector_subda(SUBDAMODULE ${ONLINEDETECTORNAME})
115 list(APPEND ALIROOTALIBS RAWDatabase_a RAWDatarec_a RAWDatasim_a STEERBase_a STEER_a CDB_a ESD_a STAT_a AOD_a )
117 expand(ALIROOTALIBS2 "\${${DAMODULE}ALIBS}")
118 expand(DAINCDIRS "\${${DAMODULE}INC}")
119 list(APPEND ALIROOTALIBS ${ALIROOTALIBS2})
121 message("Listing sub directories for ${DAMODULE}")
122 message("${DAINCDIRS}")
124 include_directories(${DAMODULE} ${SUBDIR} ${DAINCDIRS})
125 #Get detector algorithms for this detector
127 foreach(dafile ${_dafiles})
129 string(REGEX MATCH "$ENV{ALICE_ROOT}/${DAMODULE}/${DAMODULE}${SUBDAMODULE}" match ${dafile})
130 #Found a valid target name
132 string(REGEX REPLACE "$ENV{ALICE_ROOT}/${DAMODULE}/${DAMODULE}${SUBDAMODULE}(.*)da\\.cxx" "\\1" DANAME ${dafile})
133 #Check for default DA
135 set(DATARGETNAME "daqDA-${ONLINEDETECTORNAME}-${DANAME}")
137 set(DATARGETNAME "daqDA-${ONLINEDETECTORNAME}")
140 set(DATARGETDIR "${DAINSTALL}/${DAMODULE}/tgt_$ENV{ALICE_TARGET}")
141 file(MAKE_DIRECTORY ${DATARGETDIR})
143 set(DASRC "${DAMODULE}/${DAMODULE}${SUBDAMODULE}${DANAME}da.cxx")
144 set(DALIB "${DAMODULE}${SUBDAMODULE}${DANAME}DA")
145 set(DAEXE "${DAMODULE}${SUBDAMODULE}${DANAME}da.exe")
148 execute_process(COMMAND svn info $ENV{ALICE_ROOT}/${DASRC} OUTPUT_VARIABLE _daversion OUTPUT_STRIP_TRAILING_WHITESPACE)
149 string(REGEX REPLACE ".*Last Changed Rev: ([^\n]+)\n.*" "\\1" DAVERSION ${_daversion})
152 execute_process(COMMAND root-config --version OUTPUT_VARIABLE _darootrelease OUTPUT_STRIP_TRAILING_WHITESPACE)
153 string(REGEX REPLACE "/" "." DAROOTRELEASE ${_darootrelease})
156 string(REGEX REPLACE ".*URL: .*/(.+)/${DASRC}.*$" "\\1" DAALIROOTRELEASE ${_daversion})
158 set(DAARCNAME "${DATARGETNAME}")
159 set(DAARC "${DAARCNAME}-${DAVERSION}")
160 set(DATAR "${DATARGETDIR}/${DAARC}.src.tar.gz")
161 set(DASPECFILE "${DATARGETDIR}/${DAMODULE}${SUBDAMODULE}${DANAME}da.spec")
162 set(DAMAKEFILE "${DATARGETDIR}/${DAMODULE}${SUBDAMODULE}${DANAME}da.make")
170 file(READ "$ENV{ALICE_ROOT}/${DASRC}" _dasrc)
171 getinfo(DACONTACT "Contact" ${_dasrc})
172 getinfo(DALINKPAGE "Link" ${_dasrc})
173 getinfo(DAREFRUN "Reference Run" ${_dasrc})
174 getinfo(DARUNTYPE "Run Type" ${_dasrc})
175 getinfo(DATYPE "DA Type" ${_dasrc})
176 getinfo(DANUMBEROFEVENTS "Number of events needed" ${_dasrc})
177 getinfo(DAINPUTFILES "Input Files" ${_dasrc})
178 getinfo(DAOUTPUTFILES "Output Files" ${_dasrc})
179 getinfo(DATRIGGERTYPE "Trigger types used" ${_dasrc})
182 message(FATAL_ERROR "SRC FILE MISSING")
185 #----------- Targets ----------------------
187 set(CMAKE_CXX_FLAGS "${CXXFLAGS}")
188 set(CMAKE_C_FLAGS "${CFLAGS}")
189 set(CMAKE_Fortran_FLAGS ${FFLAGS})
190 set(CMAKE_SHARED_LINKER_FLAGS ${SOFLAGS})
191 set(CMAKE_MODULE_LINKER_FLAGS ${LDFLAGS})
194 message("${DAEXE}- ${DAMODULE} - ${ALIROOTALIBS}")
195 foreach(_lib ${ALIROOTALIBS})
196 string(REGEX REPLACE "-all" "_a" _lib ${_lib})
197 list(APPEND ZIP && ar x "../lib${_lib}.a")
199 list (APPEND ZIP && ar r "../lib${DALIB}.a" "*.o")
201 add_custom_target( ${DALIB} COMMAND rm -rf junk && mkdir -p junk
202 COMMAND cd junk ${ZIP}
203 COMMAND cd ../ && rm -rf junk
204 DEPENDS ${ALIROOTALIBS}
205 WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
207 add_custom_target(${DATARGETNAME})
208 add_executable(${DAEXE} ${DASRC})
209 set_property(TARGET ${DAEXE} PROPERTY EXCLUDE_FROM_ALL TRUE)
210 add_dependencies(${DAEXE} ${DALIB})
211 add_dependencies(DA-all ${DATARGETNAME})
212 target_link_libraries(${DAEXE} "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${DALIB}.a" ${EXTRAROOTLIB} "${ROOTLIBDIR}/libRoot.a" "${ROOTLIBDIR}/libfreetype.a" "${ROOTLIBDIR}/libpcre.a" ${SYSLIBS} ${DAQDALIB} ${MONITORLIBS} ${AMOREDALIBS})
213 add_dependencies(${DATARGETNAME} ${DAEXE})