Fixes for object target dependencies
[u/mrichter/AliRoot.git] / TOF / TOFbase / CMakeLists.txt
1 # **************************************************************************
2 # * Copyright(c) 1998-2014, 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 # Module
17 set(MODULE TOFbase)
18
19 # Module include folder
20 include_directories(${AliRoot_SOURCE_DIR}/TOF/${MODULE})
21
22 # Additional include folders in alphabetical order except ROOT
23 include_directories(${ROOT_INCLUDE_DIRS}
24                     ${AliRoot_SOURCE_DIR}/RAW/RAWDatabase
25                     ${AliRoot_SOURCE_DIR}/RAW/RAWDatarec
26                     ${AliRoot_SOURCE_DIR}/RAW/RAWDatasim
27                     ${AliRoot_SOURCE_DIR}/STEER/CDB
28                     ${AliRoot_SOURCE_DIR}/STEER/ESD
29                     ${AliRoot_SOURCE_DIR}/STEER/STEER
30                     ${AliRoot_SOURCE_DIR}/STEER/STEERBase
31                    )
32
33 # Sources in alphabetical order
34 set(SRCS
35     AliTOFAlignment.cxx
36     AliTOFArray.cxx
37     AliTOFCableLengthMap.cxx
38     AliTOFcalib.cxx
39     AliTOFcalibHisto.cxx
40     AliTOFChainSummaryData.cxx
41     AliTOFChannelOffline.cxx
42     AliTOFChannelOnlineArray.cxx
43     AliTOFChannelOnline.cxx
44     AliTOFChannelOnlineStatusArray.cxx
45     AliTOFChannelOnlineStatus.cxx
46     AliTOFCTPLatency.cxx
47     AliTOFDaConfigHandler.cxx
48     AliTOFDataDCS.cxx
49     AliTOFDCSmaps.cxx
50     AliTOFDecoder.cxx
51     AliTOFDecoderSummaryData.cxx
52     AliTOFDecoderV2.cxx
53     AliTOFDeltaBCOffset.cxx
54     AliTOFdigit.cxx
55     AliTOFDigitMap.cxx
56     AliTOFDRMSummaryData.cxx
57     AliTOFFEEDump.cxx
58     AliTOFFEEReader.cxx
59     AliTOFFormatDCS.cxx
60     AliTOFGeometry.cxx
61     AliTOFHitDataBuffer.cxx
62     AliTOFHitData.cxx
63     AliTOFHitField.cxx
64     AliTOFLTMSummaryData.cxx
65     AliTOFLvHvDataPoints.cxx
66     AliTOFNoiseConfigHandler.cxx
67     AliTOFPreprocessor.cxx
68     AliTOFPreprocessorFDR.cxx
69     AliTOFrawData.cxx
70     AliTOFRawMap.cxx
71     AliTOFRawStream.cxx
72     AliTOFReadoutInfo.cxx
73     AliTOFRecoParam.cxx
74     AliTOFResponseParams.cxx
75     AliTOFRunParams.cxx
76     AliTOFSDigit.cxx
77     AliTOFT0Fill.cxx
78     AliTOFT0FillOnlineCalib.cxx
79     AliTOFTDCErrorBuffer.cxx
80     AliTOFTDCError.cxx
81     AliTOFTDCHitBuffer.cxx
82     AliTOFTDCHit.cxx
83     AliTOFTRMSummaryData.cxx
84    )
85
86 # Headers from sources
87 string(REPLACE ".cxx" ".h" HDRS "${SRCS}")
88
89 # Generate the dictionary
90 # It will create G_ARG1.cxx and G_ARG1.h / ARG1 = function first argument
91 get_directory_property(incdirs INCLUDE_DIRECTORIES)
92 generate_dictionary("${MODULE}" "${MODULE}LinkDef.h" "${HDRS}" "${incdirs}")
93
94 set(ROOT_DEPENDENCIES Core Geom Gpad Hist MathCore Net RIO Tree XMLParser)
95 set(ALIROOT_DEPENDENCIES STEERBase STEER ESD CDB RAWDatabase RAWDatarec RAWDatasim)
96
97 # Generate the ROOT map
98 # Dependecies
99 set(LIBDEPS ${ALIROOT_DEPENDENCIES} ${ROOT_DEPENDENCIES})
100 generate_rootmap("${MODULE}" "${LIBDEPS}" "${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}LinkDef.h")
101
102 # Create an object to be reused in case of static libraries 
103 # Otherwise the sources will be compiled twice
104 add_library(${MODULE}-object OBJECT ${SRCS} G__${MODULE}.cxx)
105 # Follow headers dependencies
106 add_dependencies(${MODULE}-object ${ALIROOT_DEPENDENCIES})
107 # Add a library to the project using the object
108 add_library(${MODULE} SHARED $<TARGET_OBJECTS:TOFbase-object>)
109
110 # Linking
111 target_link_libraries(${MODULE} ${ALIROOT_DEPENDENCIES} ${ROOT_DEPENDENCIES})
112
113 # Setting the correct headers for the object as gathered from the dependencies
114 target_include_directories(${MODULE}-object PUBLIC $<TARGET_PROPERTY:${MODULE},INCLUDE_DIRECTORIES>)
115 set_target_properties(${MODULE}-object PROPERTIES COMPILE_DEFINITIONS $<TARGET_PROPERTY:${MODULE},COMPILE_DEFINITIONS>)
116
117 # Public include folders that will be propagated to the dependecies
118 target_include_directories(${MODULE} PUBLIC ${incdirs})
119
120 # Additional compilation flags
121 set_target_properties(${MODULE}-object PROPERTIES COMPILE_FLAGS "")
122
123 # System dependent: Modify the way the library is build
124 if(${CMAKE_SYSTEM} MATCHES Darwin)
125     set_target_properties(${MODULE} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
126 endif(${CMAKE_SYSTEM} MATCHES Darwin)
127
128 # Installation
129 install(TARGETS ${MODULE}
130         ARCHIVE DESTINATION lib
131         LIBRARY DESTINATION lib)
132
133 install(FILES ${HDRS} DESTINATION include)
134
135 # Static version if DA enabled
136 if(ALIROOT_STATIC)
137     add_library(${MODULE}-static STATIC $<TARGET_OBJECTS:TOFbase-object>)
138     set_target_properties(${MODULE}-static PROPERTIES OUTPUT_NAME ${MODULE})
139
140     # list of shared dependencies / the name of the variable containing the list of static ones
141     generate_static_dependencies("${ALIROOT_DEPENDENCIES}" "STATIC_ALIROOT_DEPENDENCIES")
142     target_link_libraries(${MODULE}-static ${STATIC_ALIROOT_DEPENDENCIES} Root)
143
144     # Public include folders that will be propagated to the dependecies
145     target_include_directories(${MODULE}-static PUBLIC ${incdirs})
146
147     set_target_properties(${MODULE}-static PROPERTIES LINK_FLAGS "-Wl,--whole-archive")
148
149     # Installation
150     install(TARGETS ${MODULE}-static
151             ARCHIVE DESTINATION lib
152             LIBRARY DESTINATION lib)
153 endif(ALIROOT_STATIC)