Fixes for object target dependencies
[u/mrichter/AliRoot.git] / RAW / RAWDatabase / 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 RAWDatabase)
18
19 # Module include folder
20 include_directories(${AliRoot_SOURCE_DIR}/RAW/${MODULE})
21
22 # Additional include folders in alphabetical order except ROOT
23 include_directories(${ROOT_INCLUDE_DIRS}
24                     ${AliRoot_SOURCE_DIR}/STEER/ESD
25                     ${AliRoot_SOURCE_DIR}/STEER/STEERBase
26                    )
27
28 # Sources in alphabetical order
29 set(SRCS
30     AliAltroMapping.cxx
31     AliCaloAltroMapping.cxx
32     AliRawDataArray.cxx
33     AliRawDataArrayV2.cxx
34     AliRawData.cxx
35     AliRawEquipment.cxx
36     AliRawEquipmentHeader.cxx
37     AliRawEquipmentV2.cxx
38     AliRawEvent.cxx
39     AliRawEventHeaderBase.cxx
40     AliRawEventTag.cxx
41     AliRawEventV2.cxx
42     AliRawVEquipment.cxx
43     AliRawVEvent.cxx
44     AliStats.cxx
45    )
46
47 # Headers from sources
48 string(REPLACE ".cxx" ".h" HDRS "${SRCS}")
49
50 # Extra headers in alphabetical order
51 set(HDRS ${HDRS}
52     AliRawDataHeader.h
53     AliRawDataHeaderV3.h
54     AliRawEventHeaderVersions.h
55    )
56
57 # Generate the dictionary
58 # It will create G_ARG1.cxx and G_ARG1.h / ARG1 = function first argument
59 get_directory_property(incdirs INCLUDE_DIRECTORIES)
60 generate_dictionary("${MODULE}" "${MODULE}LinkDef.h" "${HDRS}" "${incdirs}")
61
62 set(ROOT_DEPENDENCIES Core Hist RIO)
63 set(ALIROOT_DEPENDENCIES ESD STEERBase)
64
65 # Generate the ROOT map
66 # Dependecies
67 set(LIBDEPS ${ALIROOT_DEPENDENCIES} ${ROOT_DEPENDENCIES})
68 generate_rootmap("${MODULE}" "${LIBDEPS}" "${CMAKE_CURRENT_SOURCE_DIR}/${MODULE}LinkDef.h")
69
70 # Create an object to be reused in case of static libraries 
71 # Otherwise the sources will be compiled twice
72 add_library(${MODULE}-object OBJECT ${SRCS} G__${MODULE}.cxx)
73 # Follow headers dependencies
74 add_dependencies(${MODULE}-object ${ALIROOT_DEPENDENCIES})
75 # Add a library to the project using the object
76 add_library(${MODULE} SHARED $<TARGET_OBJECTS:RAWDatabase-object>)
77 target_link_libraries(${MODULE} ${ALIROOT_DEPENDENCIES} ${ROOT_DEPENDENCIES})
78
79 # Setting the correct headers for the object as gathered from the dependencies
80 target_include_directories(${MODULE}-object PUBLIC $<TARGET_PROPERTY:${MODULE},INCLUDE_DIRECTORIES>)
81 set_target_properties(${MODULE}-object PROPERTIES COMPILE_DEFINITIONS $<TARGET_PROPERTY:${MODULE},COMPILE_DEFINITIONS>)
82
83 # Public include folders that will be propagated to the dependecies
84 target_include_directories(${MODULE} PUBLIC ${incdirs})
85
86 set(MODULE_COMPILE_FLAGS)
87 set(MODULE_LINK_FLAGS)
88
89 if(DATE_FOUND)
90     set(MODULE_COMPILE_FLAGS "${DATE_CFLAGS}")
91     set(MODULE_LINK_FLAGS "${DATE_LDFLAGS} ${DATE_LIBS}")
92 endif(DATE_FOUND)
93
94 # Additional compilation and linking flags
95 set(MODULE_COMPILE_FLAGS " ${MODULE_COMPILE_FLAGS}")
96
97 # System dependent: Modify the way the library is build
98 if(${CMAKE_SYSTEM} MATCHES Darwin)
99     set(MODULE_LINK_FLAGS "-undefined dynamic_lookup ${MODULE_LINK_FLAGS}")
100 endif(${CMAKE_SYSTEM} MATCHES Darwin)
101
102 # Setting compilation flags for the object
103 set_target_properties(${MODULE}-object PROPERTIES COMPILE_FLAGS "${MODULE_COMPILE_FLAGS}")
104 # Setting the linking flags for the library
105 set_target_properties(${MODULE} PROPERTIES LINK_FLAGS "${MODULE_LINK_FLAGS}")
106
107 # Installation
108 install(TARGETS ${MODULE}
109         ARCHIVE DESTINATION lib
110         LIBRARY DESTINATION lib)
111
112 install(FILES ${HDRS} DESTINATION include)
113
114 # Static version if DA enabled
115 if(ALIROOT_STATIC)
116     add_library(${MODULE}-static STATIC $<TARGET_OBJECTS:RAWDatabase-object>)
117     
118     # list of shared dependencies / the name of the variable containing the list of static ones
119     generate_static_dependencies("${ALIROOT_DEPENDENCIES}" "STATIC_ALIROOT_DEPENDENCIES")
120     target_link_libraries(${MODULE}-static ${STATIC_ALIROOT_DEPENDENCIES} Root)
121     
122     # Public include folders that will be propagated to the dependecies
123     target_include_directories(${MODULE}-static PUBLIC ${incdirs})
124
125     set_target_properties(${MODULE}-static PROPERTIES OUTPUT_NAME ${MODULE})
126     set_target_properties(${MODULE}-static PROPERTIES LINK_FLAGS "-Wl,--whole-archive")
127
128     # Installation
129     install(TARGETS ${MODULE}-static
130             ARCHIVE DESTINATION lib
131             LIBRARY DESTINATION lib)
132 endif(ALIROOT_STATIC)