]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/MUONmapping/CMakeLists.txt
Fixes for object target dependencies
[u/mrichter/AliRoot.git] / MUON / MUONmapping / 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 MUONmapping)
18
19 # Module include folder
20 include_directories(${AliRoot_SOURCE_DIR}/MUON/${MODULE})
21
22 # Additional include folders in alphabetical order except ROOT
23 include_directories(${ROOT_INCLUDE_DIRS}
24                     ${AliRoot_SOURCE_DIR}/MUON/MUONcore
25                     ${AliRoot_SOURCE_DIR}/STEER/CDB
26                     ${AliRoot_SOURCE_DIR}/STEER/STEERBase
27                    )
28
29 # Sources in alphabetical order
30 set(SRCS
31     AliMpArea.cxx
32     AliMpBusPatch.cxx
33     AliMpCathodType.cxx
34     AliMpCDB.cxx
35     AliMpConnection.cxx
36     AliMpConstants.cxx
37     AliMpDataMap.cxx
38     AliMpDataProcessor.cxx
39     AliMpDataStreams.cxx
40     AliMpDCSNamer.cxx
41     AliMpDDL.cxx
42     AliMpDDLStore.cxx
43     AliMpDEIterator.cxx
44     AliMpDEManager.cxx
45     AliMpDEStore.cxx
46     AliMpDetElement.cxx
47     AliMpEncodePair.cxx
48     AliMpFastSegmentation.cxx
49     AliMpFiles.cxx
50     AliMpFrtCrocusConstants.cxx
51     AliMpHelper.cxx
52     AliMpHVUID.cxx
53     AliMpLocalBoard.cxx
54     AliMpManuIterator.cxx
55     AliMpManuStore.cxx
56     AliMpManuUID.cxx
57     AliMpMotif.cxx
58     AliMpMotifMap.cxx
59     AliMpMotifPosition.cxx
60     AliMpMotifPositionPadIterator.cxx
61     AliMpMotifReader.cxx
62     AliMpMotifSpecial.cxx
63     AliMpMotifType.cxx
64     AliMpMotifTypePadIterator.cxx
65     AliMpPad.cxx
66     AliMpPadRow.cxx
67     AliMpPadRowLSegment.cxx
68     AliMpPadRowRSegment.cxx
69     AliMpPadUID.cxx
70     AliMpPCB.cxx
71     AliMpPCBPadIterator.cxx
72     AliMpPlaneType.cxx
73     AliMpRegionalTrigger.cxx
74     AliMpRow.cxx
75     AliMpRowSegment.cxx
76     AliMpRowSegmentLSpecial.cxx
77     AliMpRowSegmentRSpecial.cxx
78     AliMpSectorAreaHPadIterator.cxx
79     AliMpSectorAreaVPadIterator.cxx
80     AliMpSector.cxx
81     AliMpSectorPadIterator.cxx
82     AliMpSectorReader.cxx
83     AliMpSectorSegmentation.cxx
84     AliMpSegmentation.cxx
85     AliMpSlat.cxx
86     AliMpSlatMotifMap.cxx
87     AliMpSlatPadIterator.cxx
88     AliMpSlatSegmentation.cxx
89     AliMpSt345Reader.cxx
90     AliMpStation12Type.cxx
91     AliMpStationType.cxx
92     AliMpSubZone.cxx
93     AliMpTriggerCrate.cxx
94     AliMpTrigger.cxx
95     AliMpTriggerReader.cxx
96     AliMpTriggerSegmentation.cxx
97     AliMpUID.cxx
98     AliMpVIndexed.cxx
99     AliMpVMotif.cxx
100     AliMpVPadIterator.cxx
101     AliMpVPadRowSegment.cxx
102     AliMpVRowSegment.cxx
103     AliMpVRowSegmentSpecial.cxx
104     AliMpVSegmentation.cxx
105     AliMpZone.cxx
106    )
107
108 # Headers from sources
109 string(REPLACE ".cxx" ".h" HDRS "${SRCS}")
110
111 # Generate the dictionary
112 # It will create G_ARG1.cxx and G_ARG1.h / ARG1 = function first argument
113 get_directory_property(incdirs INCLUDE_DIRECTORIES)
114 generate_dictionary("${MODULE}" "${MODULE}LinkDef.h" "${HDRS}" "${incdirs}")
115
116
117 # Dependencies
118 set(ROOT_DEPENDENCIES Core Physics RIO)
119 set(ALIROOT_DEPENDENCIES STEERBase CDB MUONcore)
120
121 # Generate the ROOT map
122 # Dependecies
123 set(LIBDEPS ${ALIROOT_DEPENDENCIES} ${ROOT_DEPENDENCIES})
124 generate_rootmap("${MODULE}" "${LIBDEPS}" "${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}LinkDef.h")
125
126 # Create an object to be reused in case of static libraries 
127 # Otherwise the sources will be compiled twice
128 add_library(${MODULE}-object OBJECT ${SRCS} G__${MODULE}.cxx)
129 # Follow headers dependencies
130 add_dependencies(${MODULE}-object ${ALIROOT_DEPENDENCIES})
131 # Add a library to the project using the object
132 add_library(${MODULE} SHARED $<TARGET_OBJECTS:MUONmapping-object>)
133
134 # linking
135 target_link_libraries(${MODULE} ${ALIROOT_DEPENDENCIES} ${ROOT_DEPENDENCIES})
136
137 # Setting the correct headers for the object as gathered from the dependencies
138 target_include_directories(${MODULE}-object PUBLIC $<TARGET_PROPERTY:${MODULE},INCLUDE_DIRECTORIES>)
139 set_target_properties(${MODULE}-object PROPERTIES COMPILE_DEFINITIONS $<TARGET_PROPERTY:${MODULE},COMPILE_DEFINITIONS>)
140
141 # Additional compilation flags
142 set_target_properties(${MODULE}-object PROPERTIES COMPILE_FLAGS " ")
143
144 # System dependent: Modify the way the library is build
145 if(${CMAKE_SYSTEM} MATCHES Darwin)
146     set_target_properties(${MODULE} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
147 endif(${CMAKE_SYSTEM} MATCHES Darwin)
148
149 # Installation
150 install(TARGETS ${MODULE}
151         ARCHIVE DESTINATION lib
152         LIBRARY DESTINATION lib)
153
154 install(FILES ${HDRS} DESTINATION include)
155
156 # Static version if DA enabled
157 if(ALIROOT_STATIC)
158     add_library(${MODULE}-static STATIC $<TARGET_OBJECTS:MUONmapping-object>)
159     set_target_properties(${MODULE}-static PROPERTIES OUTPUT_NAME ${MODULE})
160
161     # list of shared dependencies / the name of the variable containing the list of static ones
162     generate_static_dependencies("${ALIROOT_DEPENDENCIES}" "STATIC_ALIROOT_DEPENDENCIES")
163     target_link_libraries(${MODULE}-static ${STATIC_ALIROOT_DEPENDENCIES} Root)
164     
165     # Public include folders that will be propagated to the dependecies
166     target_include_directories(${MODULE}-static PUBLIC ${incdirs})
167
168     set_target_properties(${MODULE}-static PROPERTIES LINK_FLAGS "-Wl,--whole-archive")
169
170     # Installation
171     install(TARGETS ${MODULE}-static
172             ARCHIVE DESTINATION lib
173             LIBRARY DESTINATION lib)
174 endif(ALIROOT_STATIC)
175