]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/tools/vcpkg/ports/libffi/CMakeLists.txt
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / tools / vcpkg / ports / libffi / CMakeLists.txt
1 cmake_minimum_required(VERSION 3.9)
2 project(libffi C ASM)
3
4 set(CMAKE_SHARED_LIBRARY_PREFIX)
5 set(CMAKE_STATIC_LIBRARY_PREFIX)
6
7 if(NOT CMAKE_SYSTEM_PROCESSOR)
8 set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}")
9 endif()
10
11 # config variables for ffi.h.in
12 set(VERSION 3.3)
13
14 set(KNOWN_PROCESSORS x86 x86_64 amd64 arm arm64 i386 armv7l armv7-a aarch64)
15
16 string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" lower_system_processor)
17
18 if(NOT lower_system_processor IN_LIST KNOWN_PROCESSORS)
19 message(FATAL_ERROR "Unknown processor: ${CMAKE_SYSTEM_PROCESSOR}")
20 endif()
21
22 if(CMAKE_SYSTEM_NAME MATCHES "Windows" AND VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
23 set(TARGET ARM_WIN32)
24 elseif(CMAKE_SYSTEM_NAME MATCHES "Windows" AND VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
25 set(TARGET ARM_WIN64)
26 elseif(CMAKE_SYSTEM_NAME MATCHES "Windows" AND VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
27 set(TARGET X86_WIN32)
28 elseif(CMAKE_SYSTEM_NAME MATCHES "Windows" AND VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
29 set(TARGET X86_WIN64)
30 elseif(lower_system_processor MATCHES "arm64|aarch64")
31 set(TARGET ARM64)
32 elseif(lower_system_processor MATCHES "arm")
33 set(TARGET ARM)
34 elseif(CMAKE_SYSTEM_NAME MATCHES "BSD" AND CMAKE_SIZEOF_VOID_P EQUAL 4)
35 set(TARGET X86_FREEBSD)
36 elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin" AND CMAKE_SIZEOF_VOID_P EQUAL 4)
37 set(TARGET X86_DARWIN)
38 elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
39 set(TARGET X86_64)
40 elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
41 set(TARGET X86)
42 else()
43 message(FATAL_ERROR "Cannot determine target. Please consult ${CMAKE_CURRENT_SOURCE_DIR}/configure.ac and add your platform to this CMake file.")
44 endif()
45
46 if("${TARGET}" STREQUAL "X86_64")
47 set(HAVE_LONG_DOUBLE 1)
48 else()
49 set(HAVE_LONG_DOUBLE 0)
50 endif()
51 set(FFI_EXEC_TRAMPOLINE_TABLE 0)
52
53 # mimic layout of original buildsystem
54 configure_file(include/ffi.h.in ${CMAKE_BINARY_DIR}/include/ffi.h)
55 file(COPY ${FFI_CONFIG_FILE} DESTINATION ${CMAKE_BINARY_DIR})
56
57 if ("${TARGET}" STREQUAL "ARM_WIN64" OR "${TARGET}" STREQUAL "ARM64")
58 file(COPY src/aarch64/ffitarget.h DESTINATION ${CMAKE_BINARY_DIR}/include)
59 elseif ("${TARGET}" STREQUAL "ARM_WIN32" OR "${TARGET}" STREQUAL "ARM")
60 file(COPY src/arm/ffitarget.h DESTINATION ${CMAKE_BINARY_DIR}/include)
61 else()
62 file(COPY src/x86/ffitarget.h DESTINATION ${CMAKE_BINARY_DIR}/include)
63 endif()
64
65 include_directories(${CMAKE_BINARY_DIR}/include)
66 include_directories(${CMAKE_BINARY_DIR})
67 include_directories(include)
68
69 add_definitions(-DFFI_BUILDING)
70 if(BUILD_SHARED_LIBS AND WIN32)
71 add_definitions(-DFFI_BUILDING_DLL)
72 endif()
73
74 set(FFI_SOURCES
75 src/closures.c
76 src/prep_cif.c
77 src/types.c)
78
79 if ("${TARGET}" STREQUAL "ARM_WIN64" OR "${TARGET}" STREQUAL "ARM64")
80 set(FFI_SOURCES
81 ${FFI_SOURCES}
82 src/aarch64/ffi.c)
83 elseif("${TARGET}" STREQUAL "ARM_WIN32" OR "${TARGET}" STREQUAL "ARM")
84 set(FFI_SOURCES
85 ${FFI_SOURCES}
86 src/arm/ffi.c)
87 else()
88 set(FFI_SOURCES
89 ${FFI_SOURCES}
90 src/java_raw_api.c
91 src/raw_api.c)
92 if("${TARGET}" STREQUAL "X86_WIN32" OR "${TARGET}" STREQUAL "X86_DARWIN" OR "${TARGET}" STREQUAL "X86")
93 set(FFI_SOURCES
94 ${FFI_SOURCES}
95 src/x86/ffi.c)
96 elseif("${TARGET}" STREQUAL "X86_WIN64")
97 set(FFI_SOURCES
98 ${FFI_SOURCES}
99 src/x86/ffiw64.c)
100 elseif("${TARGET}" STREQUAL "X86_64")
101 set(FFI_SOURCES
102 ${FFI_SOURCES}
103 src/x86/ffi64.c
104 src/x86/ffiw64.c)
105 endif()
106 endif()
107
108 macro(add_assembly ASMFILE)
109 get_filename_component(ASMFILE_FULL "${ASMFILE}" ABSOLUTE)
110 if(MSVC)
111 if ("${TARGET}" STREQUAL "ARM_WIN64")
112 set(ARCH_ASSEMBLER armasm64)
113 elseif ("${TARGET}" STREQUAL "ARM_WIN32")
114 set(ARCH_ASSEMBLER armasm)
115 elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
116 set(ARCH_ASSEMBLER ml /safeseh /c /Zi)
117 else()
118 set(ARCH_ASSEMBLER ml64 /c /Zi)
119 endif()
120
121 get_filename_component(ARCH_ASM_NAME "${ASMFILE_FULL}" NAME_WE)
122
123 execute_process(
124 COMMAND ${CMAKE_C_COMPILER} /nologo /EP /I. /Iinclude /I${CMAKE_CURRENT_SOURCE_DIR}/include "${ASMFILE_FULL}"
125 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
126 OUTPUT_FILE ${ARCH_ASM_NAME}.asm
127 RESULT_VARIABLE retcode
128 )
129
130 if(NOT ${retcode} STREQUAL "0")
131 message(FATAL_ERROR "Unable to assemble, exit code: '${retcode}'.")
132 endif()
133
134 # Produced *.asm file could be just added to sources.
135 # It works in x64 mode, but for some strange reason MASM returns error code when in x86,
136 # (even though it didn't report any errors and correctly generated object file)
137 # which in turn causes MSBUILD to stop.
138 execute_process(
139 COMMAND ${ARCH_ASSEMBLER} ${ARCH_ASM_NAME}.asm
140 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
141 RESULT_VARIABLE retcode
142 )
143
144 if(NOT ${retcode} STREQUAL "0")
145 message(FATAL_ERROR "Unable to compile assembly, exit code: '${retcode}'.")
146 endif()
147
148 list(APPEND FFI_SOURCES ${CMAKE_BINARY_DIR}/${ARCH_ASM_NAME}.obj)
149 else()
150 list(APPEND FFI_SOURCES ${ASMFILE})
151 endif()
152 endmacro()
153
154 if("${TARGET}" STREQUAL "X86")
155 set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -m32")
156 endif()
157
158 if("${TARGET}" STREQUAL "X86" OR "${TARGET}" STREQUAL "X86_DARWIN")
159 add_assembly(src/x86/sysv.S)
160 elseif("${TARGET}" STREQUAL "X86_64")
161 add_assembly(src/x86/unix64.S)
162 add_assembly(src/x86/win64.S)
163 elseif("${TARGET}" STREQUAL "X86_WIN32")
164 if(MSVC)
165 add_assembly(src/x86/sysv_intel.S)
166 else()
167 add_assembly(src/x86/sysv.S)
168 endif()
169 elseif("${TARGET}" STREQUAL "X86_WIN64")
170 if(MSVC)
171 add_assembly(src/x86/win64_intel.S)
172 else()
173 add_assembly(src/x86/win64.S)
174 endif()
175 elseif("${TARGET}" STREQUAL "ARM_WIN32")
176 if(MSVC)
177 add_assembly(src/arm/sysv_msvc_arm32.S)
178 else()
179 add_assembly(src/arm/sysv.S)
180 endif()
181 elseif("${TARGET}" STREQUAL "ARM")
182 add_assembly(src/arm/sysv.S)
183 elseif("${TARGET}" STREQUAL "ARM_WIN64")
184 if(MSVC)
185 add_assembly(src/aarch64/win64_armasm.S)
186 else()
187 add_assembly(src/aarch64/sysv.S)
188 endif()
189 elseif("${TARGET}" STREQUAL "ARM64")
190 add_assembly(src/aarch64/sysv.S)
191 else()
192 message(FATAL_ERROR "Target not implemented")
193 endif()
194
195 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
196 list(APPEND FFI_SOURCES src/debug.c)
197 add_definitions(-DFFI_DEBUG)
198 endif()
199
200 add_library(libffi ${FFI_SOURCES})
201
202 install(TARGETS libffi
203 EXPORT ${PROJECT_NAME}Targets
204 RUNTIME DESTINATION bin
205 ARCHIVE DESTINATION lib
206 LIBRARY DESTINATION lib)
207
208 include(CMakePackageConfigHelpers)
209
210 configure_package_config_file(${PROJECT_NAME}Config.cmake.in
211 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
212 INSTALL_DESTINATION share/${PROJECT_NAME})
213 write_basic_package_version_file(
214 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
215 VERSION ${VERSION}
216 COMPATIBILITY AnyNewerVersion)
217 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
218 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
219 DESTINATION share/${PROJECT_NAME})
220 install(EXPORT ${PROJECT_NAME}Targets
221 DESTINATION share/${PROJECT_NAME})
222
223 if(NOT FFI_SKIP_HEADERS)
224 install(FILES
225 ${CMAKE_BINARY_DIR}/include/ffi.h
226 ${CMAKE_BINARY_DIR}/include/ffitarget.h
227 DESTINATION include)
228 endif()