Append RTlib properties, don't overwrite
[dyninst.git] / dyninstAPI_RT / CMakeLists.txt
1 # CMake configuration for dyninstAPI_RT directory
2
3 include_directories (
4     ${PROJECT_SOURCE_DIR}/dyninstAPI_RT/src
5   )
6
7 set (SRC_LIST
8     src/RTcommon.c 
9     src/RTmemEmulator.c
10 )
11
12 if (PLATFORM MATCHES freebsd)
13 set (SRC_LIST ${SRC_LIST}
14     src/RTposix.c
15     src/RTfreebsd.c 
16     src/RTheap.c 
17     src/RTheap-freebsd.c 
18     src/RTthread.c 
19     src/RTspace.S 
20     src/RTsignal.c 
21 )
22 elseif (PLATFORM MATCHES linux OR PLATFORM MATCHES bgq)
23 set (SRC_LIST ${SRC_LIST}
24     src/RTposix.c 
25     src/RTlinux.c 
26     src/RTheap.c 
27     src/RTheap-linux.c 
28     src/RTthread.c 
29     src/RTspace.S 
30     src/RTsignal.c 
31 )
32 elseif (PLATFORM MATCHES nt OR PLATFORM MATCHES windows)
33 set (SRC_LIST ${SRC_LIST}
34     src/RTheap.c 
35     src/RTheap-win.c
36     src/RTwinnt.c
37         src/RTthread.c
38 )
39 endif ()
40
41 set (SRC_LIST_i386
42     src/RTthread-x86.c 
43     src/RTtlsgetaddr-x86.S 
44     src/RTstatic_ctors_dtors-x86.c
45 )
46 set (SRC_LIST_x86_64
47     src/RTthread-x86-64.c 
48     src/RTtlsgetaddr-x86.S
49     src/RTstatic_ctors_dtors-x86.c
50 )
51 set (SRC_LIST_ppc32
52     src/RTthread-powerpc.c
53     src/RTthread-powerpc-asm.S
54     src/RTstatic_ctors_dtors-ppc32.c
55 )
56 set (SRC_LIST_ppc64
57     src/RTthread-powerpc.c
58     src/RTthread-powerpc-asm.S
59     src/RTstatic_ctors_dtors-ppc64.c                                                                                         
60 )
61
62 # We use gcc to compile the various assembly files, but
63 # cmake doesn't default to knowing that gcc can
64 # handle .S. 
65 file (GLOB SRC_ASSEMBLY "src/*.S")
66 set_source_files_properties(${SRC_ASSEMBLY}
67         PROPERTIES
68         LANGUAGE C)
69
70 if (PLATFORM MATCHES amd64 OR PLATFORM MATCHES x86_64)
71 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_i386})
72 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_x86_64})
73 elseif (PLATFORM MATCHES ppc64)
74 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_ppc32})
75 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc64}) 
76 elseif (PLATFORM MATCHES i386)
77 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_i386})
78 elseif (PLATFORM MATCHES ppc32)
79 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc32})
80 endif()
81
82
83 add_library (dyninstAPI_RT SHARED ${SRC_LIST})
84
85 if (NOT PLATFORM MATCHES nt AND NOT PLATFORM MATCHES windows)
86     target_link_libraries (dyninstAPI_RT ${CMAKE_DL_LIBS})
87 else() # windows
88     target_link_libraries (dyninstAPI_RT ws2_32 dbghelp psapi)
89 endif()
90
91 add_library (dyninstAPI_RT_static STATIC ${SRC_LIST})
92
93 # this should carry over from CMakeLists.txt
94 set_target_properties (dyninstAPI_RT dyninstAPI_RT_static
95                       PROPERTIES
96                       SOVERSION ${SOVERSION}
97                       VERSION ${LIBVERSION})
98
99 # this will not
100 set_target_properties (dyninstAPI_RT_static
101                       PROPERTIES
102                       OUTPUT_NAME dyninstAPI_RT)
103
104 message(STATUS "dyninstAPI RT library SOVERSION: ${SOVERSION}")
105 message(STATUS "dyninstAPI RT library LIBVERSION: ${LIBVERSION}")
106
107 get_property(dyninstAPI_RT_location TARGET dyninstAPI_RT PROPERTY LOCATION)
108 message(STATUS "dyninstAPI output location: ${dyninstAPI_RT_location}")
109
110 FILE (GLOB headers "h/*.h")
111 # append, you fool!
112 set_target_properties (dyninstAPI_RT dyninstAPI_RT_static PROPERTIES PUBLIC_HEADER "${headers}")
113
114 INSTALL (TARGETS dyninstAPI_RT dyninstAPI_RT_static
115         EXPORT DyninstTargets
116         RUNTIME DESTINATION ${INSTALL_LIB_DIR}
117         LIBRARY DESTINATION ${INSTALL_LIB_DIR}
118         ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
119         PUBLIC_HEADER DESTINATION ${INSTALL_INCLUDE_DIR})
120
121 # Test to see if we want the 32-bit library
122
123 if (SRC_LIST_mabi) 
124
125 # The following code is from CheckCCompilerFlag.cmake. It uses a
126 # simple program that can be compiled even if 32-bit includes are 
127 # missing; we need to extend it somewhat
128
129 INCLUDE(CheckCSourceCompiles)
130
131 MACRO (CHECK_C_COMPILER_FLAG_EXTENDED _FLAG _RESULT)
132    SET(SAFE_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
133    SET(CMAKE_C_FLAGS "${_FLAG}")
134
135 # Addition here: use signal.h
136    CHECK_C_SOURCE_COMPILES("#include <signal.h>
137    int main(void) { return 0; }" 
138         ${_RESULT}
139 # End addition
140      # Some compilers do not fail with a bad flag
141      FAIL_REGEX "warning: command line option .* is valid for .* but not for C"
142                                                             # Apple gcc
143      FAIL_REGEX "unrecognized .*option"                     # GNU
144      FAIL_REGEX "unknown .*option"                          # Clang
145      FAIL_REGEX "ignoring unknown option"                   # MSVC
146      FAIL_REGEX "warning D9002"                             # MSVC, any lang
147      FAIL_REGEX "[Uu]nknown option"                         # HP
148      FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
149      FAIL_REGEX "command option .* is not recognized"       # XL
150      )
151    SET(CMAKE_C_FLAGS "${SAFE_CMAKE_C_FLAGS}")
152 ENDMACRO (CHECK_C_COMPILER_FLAG_EXTENDED)
153
154
155 message (STATUS "Checking for 32-bit runtime library...")
156
157 CHECK_C_COMPILER_FLAG_EXTENDED ("-m32" CHECK_RT_LIB_32)
158 if (CHECK_RT_LIB_32)
159 message (STATUS "Enabling 32-bit runtime library; change BUILD_RTLIB_32 to OFF to disable")
160 SET (BUILD_RTLIB_32 ON CACHE STRING "Build 32-bit version of RT library")
161 ELSE ()
162 SET (BUILD_RTLIB_32 OFF CACHE STRING "Build 32-bit version of RT library")
163 ENDIF()
164
165
166 if (BUILD_RTLIB_32 MATCHES "ON")
167
168 add_library (dyninstAPI_RT_m32 SHARED ${SRC_LIST_mabi})
169 target_link_libraries (dyninstAPI_RT_m32 ${CMAKE_DL_LIBS})
170 add_library (dyninstAPI_RT_m32_static STATIC ${SRC_LIST_mabi})
171
172 set_target_properties (dyninstAPI_RT_m32 dyninstAPI_RT_m32_static
173                       PROPERTIES
174                       COMPILE_FLAGS "-m32"
175                       LINK_FLAGS "-m32"
176                       SOVERSION ${SOVERSION}
177                       VERSION ${LIBVERSION})
178
179 set_target_properties (dyninstAPI_RT_m32_static
180                       PROPERTIES
181                       OUTPUT_NAME dyninstAPI_RT_m32)
182 #                      COMPILE_FLAGS "-m32"
183 #                      LINK_FLAGS "-m32"
184 #                      SOVERSION ${SOVERSION}
185 #                      VERSION ${LIBVERSION})
186
187 INSTALL (TARGETS dyninstAPI_RT_m32 dyninstAPI_RT_m32_static
188         EXPORT DyninstTargets
189         RUNTIME DESTINATION ${INSTALL_LIB_DIR}
190         LIBRARY DESTINATION ${INSTALL_LIB_DIR}
191         ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
192         PUBLIC_HEADER DESTINATION ${INSTALL_INCLUDE_DIR})
193
194
195 endif()
196 endif()