Add the x86_64/linux tests cmake structure
[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     src/RTsignal.c 
11 )
12
13 if (PLATFORM MATCHES freebsd)
14 set (SRC_LIST ${SRC_LIST}
15     src/RTposix.c
16     src/RTfreebsd.c 
17     src/RTheap.c 
18     src/RTheap-freebsd.c 
19     src/RTthread.c 
20     src/RTspace.S 
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 )
31 endif ()
32
33 set (SRC_LIST_i386
34     src/RTthread-x86.c 
35     src/RTtlsgetaddr-x86.S 
36     src/RTstatic_ctors_dtors-x86.c
37 )
38 set (SRC_LIST_x86_64
39     src/RTthread-x86-64.c 
40     src/RTtlsgetaddr-x86.S
41     src/RTstatic_ctors_dtors-x86.c
42 )
43 set (SRC_LIST_ppc32
44     src/RTthread-powerpc.c
45     src/RTthread-powerpc-asm.S
46     src/RTstatic_ctors_dtors-ppc32.c
47 )
48 set (SRC_LIST_ppc64
49     src/RTthread-powerpc.c
50     src/RTthread-powerpc-asm.S
51     src/RTstatic_ctors_dtors-ppc64.c                                                                                         
52 )
53
54 # We use gcc to compile the various assembly files, but
55 # cmake doesn't default to knowing that gcc can
56 # handle .S. 
57 file (GLOB SRC_ASSEMBLY "src/*.S")
58 set_source_files_properties(${SRC_ASSEMBLY}
59         PROPERTIES
60         LANGUAGE C)
61
62 if (PLATFORM MATCHES amd64 OR PLATFORM MATCHES x86_64)
63 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_i386})
64 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_x86_64})
65 elseif (PLATFORM MATCHES ppc64)
66 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_ppc32})
67 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc64}) 
68 elseif (PLATFORM MATCHES i386)
69 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_i386})
70 elseif (PLATFORM MATCHES ppc32)
71 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc32})
72 endif()
73
74
75 add_library (dyninstAPI_RT SHARED ${SRC_LIST})
76 target_link_libraries (dyninstAPI_RT dl)
77 add_library (dyninstAPI_RT_static STATIC ${SRC_LIST})
78
79 set_target_properties (dyninstAPI_RT
80                       PROPERTIES
81                       SOVERSION ${SOVERSION}
82                       VERSION ${LIBVERSION})
83
84 set_target_properties (dyninstAPI_RT_static
85                       PROPERTIES
86                       OUTPUT_NAME dyninstAPI_RT
87                       SOVERSION ${SOVERSION}
88                       VERSION ${LIBVERSION})
89
90 INSTALL (DIRECTORY h/ DESTINATION include FILES_MATCHING PATTERN "*.h")
91 INSTALL (TARGETS dyninstAPI_RT dyninstAPI_RT_static
92         LIBRARY DESTINATION lib
93         ARCHIVE DESTINATION lib)
94
95 # Test to see if we want the 32-bit library
96
97 if (SRC_LIST_mabi) 
98
99 # The following code is from CheckCCompilerFlag.cmake. It uses a
100 # simple program that can be compiled even if 32-bit includes are 
101 # missing; we need to extend it somewhat
102
103 INCLUDE(CheckCSourceCompiles)
104
105 MACRO (CHECK_C_COMPILER_FLAG_EXTENDED _FLAG _RESULT)
106    SET(SAFE_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
107    SET(CMAKE_C_FLAGS "${_FLAG}")
108
109 # Addition here: use signal.h
110    CHECK_C_SOURCE_COMPILES("#include <signal.h>
111    int main(void) { return 0; }" 
112         ${_RESULT}
113 # End addition
114      # Some compilers do not fail with a bad flag
115      FAIL_REGEX "warning: command line option .* is valid for .* but not for C"
116                                                             # Apple gcc
117      FAIL_REGEX "unrecognized .*option"                     # GNU
118      FAIL_REGEX "unknown .*option"                          # Clang
119      FAIL_REGEX "ignoring unknown option"                   # MSVC
120      FAIL_REGEX "warning D9002"                             # MSVC, any lang
121      FAIL_REGEX "[Uu]nknown option"                         # HP
122      FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
123      FAIL_REGEX "command option .* is not recognized"       # XL
124      )
125    SET(CMAKE_C_FLAGS "${SAFE_CMAKE_C_FLAGS}")
126 ENDMACRO (CHECK_C_COMPILER_FLAG_EXTENDED)
127
128
129 message (STATUS "Checking for 32-bit runtime library...")
130
131 CHECK_C_COMPILER_FLAG_EXTENDED ("-m32" CHECK_RT_LIB_32)
132 if (CHECK_RT_LIB_32)
133 message (STATUS "Enabling 32-bit runtime library; change BUILD_RTLIB_32 to OFF to disable")
134 SET (BUILD_RTLIB_32 ON CACHE STRING "Build 32-bit version of RT library")
135 ELSE ()
136 SET (BUILD_RTLIB_32 OFF CACHE STRING "Build 32-bit version of RT library")
137 ENDIF()
138
139
140 if (BUILD_RTLIB_32 MATCHES "ON")
141
142 add_library (dyninstAPI_RT_m32 SHARED ${SRC_LIST_mabi})
143 target_link_libraries (dyninstAPI_RT_m32 dl)
144 add_library (dyninstAPI_RT_m32_static STATIC ${SRC_LIST_mabi})
145
146 set_target_properties (dyninstAPI_RT_m32
147                       PROPERTIES
148                       COMPILE_FLAGS "-m32"
149                       LINK_FLAGS "-m32"
150                       SOVERSION ${SOVERSION}
151                       VERSION ${LIBVERSION})
152
153 set_target_properties (dyninstAPI_RT_m32_static
154                       PROPERTIES
155                       OUTPUT_NAME dyninstAPI_RT_m32
156                       COMPILE_FLAGS "-m32"
157                       LINK_FLAGS "-m32"
158                       SOVERSION ${SOVERSION}
159                       VERSION ${LIBVERSION})
160
161 INSTALL (TARGETS dyninstAPI_RT_m32 dyninstAPI_RT_m32_static
162          LIBRARY DESTINATION lib
163          ARCHIVE DESTINATION lib)
164
165
166 endif()
167 endif()