]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/tools/vcpkg/scripts/cmake/vcpkg_configure_cmake.cmake
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / tools / vcpkg / scripts / cmake / vcpkg_configure_cmake.cmake
1 # DEPRECATED BY ports/vcpkg-cmake/vcpkg_cmake_configure
2 #[===[.md:
3 # vcpkg_configure_cmake
4
5 Configure CMake for Debug and Release builds of a project.
6
7 ## Usage
8 ```cmake
9 vcpkg_configure_cmake(
10 SOURCE_PATH <${SOURCE_PATH}>
11 [PREFER_NINJA]
12 [DISABLE_PARALLEL_CONFIGURE]
13 [NO_CHARSET_FLAG]
14 [GENERATOR <"NMake Makefiles">]
15 [OPTIONS <-DUSE_THIS_IN_ALL_BUILDS=1>...]
16 [OPTIONS_RELEASE <-DOPTIMIZE=1>...]
17 [OPTIONS_DEBUG <-DDEBUGGABLE=1>...]
18 )
19 ```
20
21 ## Parameters
22 ### SOURCE_PATH
23 Specifies the directory containing the `CMakeLists.txt`.
24 By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.
25
26 ### PREFER_NINJA
27 Indicates that, when available, Vcpkg should use Ninja to perform the build.
28 This should be specified unless the port is known to not work under Ninja.
29
30 ### DISABLE_PARALLEL_CONFIGURE
31 Disables running the CMake configure step in parallel.
32 This is needed for libraries which write back into their source directory during configure.
33
34 This also disables CMAKE_DISABLE_SOURCE_CHANGES.
35
36 ### NO_CHARSET_FLAG
37 Disables passing `utf-8` as the default character set to `CMAKE_C_FLAGS` and `CMAKE_CXX_FLAGS`.
38
39 This is needed for libraries that set their own source code's character set.
40
41 ### GENERATOR
42 Specifies the precise generator to use.
43
44 This is useful if some project-specific buildsystem has been wrapped in a cmake script that won't perform an actual build.
45 If used for this purpose, it should be set to `"NMake Makefiles"`.
46
47 ### OPTIONS
48 Additional options passed to CMake during the configuration.
49
50 ### OPTIONS_RELEASE
51 Additional options passed to CMake during the Release configuration. These are in addition to `OPTIONS`.
52
53 ### OPTIONS_DEBUG
54 Additional options passed to CMake during the Debug configuration. These are in addition to `OPTIONS`.
55
56 ### LOGNAME
57 Name of the log to write the output of the configure call to.
58
59 ## Notes
60 This command supplies many common arguments to CMake. To see the full list, examine the source.
61
62 ## Examples
63
64 * [zlib](https://github.com/Microsoft/vcpkg/blob/master/ports/zlib/portfile.cmake)
65 * [cpprestsdk](https://github.com/Microsoft/vcpkg/blob/master/ports/cpprestsdk/portfile.cmake)
66 * [poco](https://github.com/Microsoft/vcpkg/blob/master/ports/poco/portfile.cmake)
67 * [opencv](https://github.com/Microsoft/vcpkg/blob/master/ports/opencv/portfile.cmake)
68 #]===]
69
70 function(vcpkg_configure_cmake)
71 if(Z_VCPKG_CMAKE_CONFIGURE_GUARD)
72 message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-cmake; using both vcpkg-cmake and vcpkg_configure_cmake in the same port is unsupported.")
73 endif()
74
75 cmake_parse_arguments(PARSE_ARGV 0 arg
76 "PREFER_NINJA;DISABLE_PARALLEL_CONFIGURE;NO_CHARSET_FLAG"
77 "SOURCE_PATH;GENERATOR;LOGNAME"
78 "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE"
79 )
80
81 if(NOT VCPKG_PLATFORM_TOOLSET)
82 message(FATAL_ERROR "Vcpkg has been updated with VS2017 support; "
83 "however, vcpkg.exe must be rebuilt by re-running bootstrap-vcpkg.bat\n")
84 endif()
85
86 if(NOT arg_LOGNAME)
87 set(arg_LOGNAME config-${TARGET_TRIPLET})
88 endif()
89
90 if(CMAKE_HOST_WIN32)
91 if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
92 set(arg_HOST_ARCHITECTURE $ENV{PROCESSOR_ARCHITEW6432})
93 else()
94 set(arg_HOST_ARCHITECTURE $ENV{PROCESSOR_ARCHITECTURE})
95 endif()
96 endif()
97
98 set(NINJA_CAN_BE_USED ON) # Ninja as generator
99 set(NINJA_HOST ON) # Ninja as parallel configurator
100
101 if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
102 set(_TARGETTING_UWP 1)
103 endif()
104
105 if(arg_HOST_ARCHITECTURE STREQUAL "x86")
106 # Prebuilt ninja binaries are only provided for x64 hosts
107 set(NINJA_CAN_BE_USED OFF)
108 set(NINJA_HOST OFF)
109 elseif(_TARGETTING_UWP)
110 # Ninja and MSBuild have many differences when targetting UWP, so use MSBuild to maximize existing compatibility
111 set(NINJA_CAN_BE_USED OFF)
112 endif()
113
114 if(arg_GENERATOR)
115 set(GENERATOR ${arg_GENERATOR})
116 elseif(arg_PREFER_NINJA AND NINJA_CAN_BE_USED)
117 set(GENERATOR "Ninja")
118 elseif(VCPKG_CHAINLOAD_TOOLCHAIN_FILE OR (VCPKG_CMAKE_SYSTEM_NAME AND NOT _TARGETTING_UWP))
119 set(GENERATOR "Ninja")
120
121 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v120")
122 set(GENERATOR "Visual Studio 12 2013")
123 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v120")
124 set(GENERATOR "Visual Studio 12 2013 Win64")
125 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v120")
126 set(GENERATOR "Visual Studio 12 2013 ARM")
127
128 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v140")
129 set(GENERATOR "Visual Studio 14 2015")
130 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v140")
131 set(GENERATOR "Visual Studio 14 2015 Win64")
132 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v140")
133 set(GENERATOR "Visual Studio 14 2015 ARM")
134
135 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v141")
136 set(GENERATOR "Visual Studio 15 2017")
137 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v141")
138 set(GENERATOR "Visual Studio 15 2017 Win64")
139 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v141")
140 set(GENERATOR "Visual Studio 15 2017 ARM")
141 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v141")
142 set(GENERATOR "Visual Studio 15 2017")
143 set(ARCH "ARM64")
144
145 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
146 set(GENERATOR "Visual Studio 16 2019")
147 set(ARCH "Win32")
148 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
149 set(GENERATOR "Visual Studio 16 2019")
150 set(ARCH "x64")
151 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
152 set(GENERATOR "Visual Studio 16 2019")
153 set(ARCH "ARM")
154 elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
155 set(GENERATOR "Visual Studio 16 2019")
156 set(ARCH "ARM64")
157
158 else()
159 if(NOT VCPKG_CMAKE_SYSTEM_NAME)
160 set(VCPKG_CMAKE_SYSTEM_NAME Windows)
161 endif()
162 message(FATAL_ERROR "Unable to determine appropriate generator for: "
163 "${VCPKG_CMAKE_SYSTEM_NAME}-${VCPKG_TARGET_ARCHITECTURE}-${VCPKG_PLATFORM_TOOLSET}")
164 endif()
165
166 # If we use Ninja, make sure it's on PATH
167 if(GENERATOR STREQUAL "Ninja" AND NOT DEFINED ENV{VCPKG_FORCE_SYSTEM_BINARIES})
168 vcpkg_find_acquire_program(NINJA)
169 get_filename_component(NINJA_PATH ${NINJA} DIRECTORY)
170 vcpkg_add_to_path("${NINJA_PATH}")
171 list(APPEND arg_OPTIONS "-DCMAKE_MAKE_PROGRAM=${NINJA}")
172 endif()
173
174 file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
175
176 if(DEFINED VCPKG_CMAKE_SYSTEM_NAME)
177 list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}")
178 if(_TARGETTING_UWP AND NOT DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
179 set(VCPKG_CMAKE_SYSTEM_VERSION 10.0)
180 elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android" AND NOT DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
181 set(VCPKG_CMAKE_SYSTEM_VERSION 21)
182 endif()
183 endif()
184
185 if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
186 list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}")
187 endif()
188
189 if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
190 list(APPEND arg_OPTIONS -DBUILD_SHARED_LIBS=ON)
191 elseif(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
192 list(APPEND arg_OPTIONS -DBUILD_SHARED_LIBS=OFF)
193 else()
194 message(FATAL_ERROR
195 "Invalid setting for VCPKG_LIBRARY_LINKAGE: \"${VCPKG_LIBRARY_LINKAGE}\". "
196 "It must be \"static\" or \"dynamic\"")
197 endif()
198
199 macro(check_both_vars_are_set var1 var2)
200 if((NOT DEFINED ${var1} OR NOT DEFINED ${var2}) AND (DEFINED ${var1} OR DEFINED ${var2}))
201 message(FATAL_ERROR "Both ${var1} and ${var2} must be set.")
202 endif()
203 endmacro()
204
205 check_both_vars_are_set(VCPKG_CXX_FLAGS_DEBUG VCPKG_C_FLAGS_DEBUG)
206 check_both_vars_are_set(VCPKG_CXX_FLAGS_RELEASE VCPKG_C_FLAGS_RELEASE)
207 check_both_vars_are_set(VCPKG_CXX_FLAGS VCPKG_C_FLAGS)
208
209 set(VCPKG_SET_CHARSET_FLAG ON)
210 if(arg_NO_CHARSET_FLAG)
211 set(VCPKG_SET_CHARSET_FLAG OFF)
212 endif()
213
214 if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
215 if(NOT DEFINED VCPKG_CMAKE_SYSTEM_NAME OR _TARGETTING_UWP)
216 set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/windows.cmake")
217 elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
218 set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/linux.cmake")
219 elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android")
220 set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/android.cmake")
221 elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Darwin")
222 set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/osx.cmake")
223 elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "iOS")
224 set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/ios.cmake")
225 elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
226 set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/freebsd.cmake")
227 elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
228 set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/openbsd.cmake")
229 elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "MinGW")
230 set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake")
231 endif()
232 endif()
233
234
235 list(APPEND arg_OPTIONS
236 "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}"
237 "-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}"
238 "-DVCPKG_SET_CHARSET_FLAG=${VCPKG_SET_CHARSET_FLAG}"
239 "-DVCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}"
240 "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON"
241 "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON"
242 "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON"
243 "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE"
244 "-DCMAKE_VERBOSE_MAKEFILE=ON"
245 "-DVCPKG_APPLOCAL_DEPS=OFF"
246 "-DCMAKE_TOOLCHAIN_FILE=${SCRIPTS}/buildsystems/vcpkg.cmake"
247 "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON"
248 "-DVCPKG_CXX_FLAGS=${VCPKG_CXX_FLAGS}"
249 "-DVCPKG_CXX_FLAGS_RELEASE=${VCPKG_CXX_FLAGS_RELEASE}"
250 "-DVCPKG_CXX_FLAGS_DEBUG=${VCPKG_CXX_FLAGS_DEBUG}"
251 "-DVCPKG_C_FLAGS=${VCPKG_C_FLAGS}"
252 "-DVCPKG_C_FLAGS_RELEASE=${VCPKG_C_FLAGS_RELEASE}"
253 "-DVCPKG_C_FLAGS_DEBUG=${VCPKG_C_FLAGS_DEBUG}"
254 "-DVCPKG_CRT_LINKAGE=${VCPKG_CRT_LINKAGE}"
255 "-DVCPKG_LINKER_FLAGS=${VCPKG_LINKER_FLAGS}"
256 "-DVCPKG_LINKER_FLAGS_RELEASE=${VCPKG_LINKER_FLAGS_RELEASE}"
257 "-DVCPKG_LINKER_FLAGS_DEBUG=${VCPKG_LINKER_FLAGS_DEBUG}"
258 "-DVCPKG_TARGET_ARCHITECTURE=${VCPKG_TARGET_ARCHITECTURE}"
259 "-DCMAKE_INSTALL_LIBDIR:STRING=lib"
260 "-DCMAKE_INSTALL_BINDIR:STRING=bin"
261 "-D_VCPKG_ROOT_DIR=${VCPKG_ROOT_DIR}"
262 "-D_VCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}"
263 "-DVCPKG_MANIFEST_INSTALL=OFF"
264 )
265
266 if(DEFINED ARCH)
267 list(APPEND arg_OPTIONS
268 "-A${ARCH}"
269 )
270 endif()
271
272 # Sets configuration variables for macOS builds
273 foreach(config_var INSTALL_NAME_DIR OSX_DEPLOYMENT_TARGET OSX_SYSROOT OSX_ARCHITECTURES)
274 if(DEFINED VCPKG_${config_var})
275 list(APPEND arg_OPTIONS "-DCMAKE_${config_var}=${VCPKG_${config_var}}")
276 endif()
277 endforeach()
278
279 set(rel_command
280 ${CMAKE_COMMAND} ${arg_SOURCE_PATH} "${arg_OPTIONS}" "${arg_OPTIONS_RELEASE}"
281 -G ${GENERATOR}
282 -DCMAKE_BUILD_TYPE=Release
283 -DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR})
284 set(dbg_command
285 ${CMAKE_COMMAND} ${arg_SOURCE_PATH} "${arg_OPTIONS}" "${arg_OPTIONS_DEBUG}"
286 -G ${GENERATOR}
287 -DCMAKE_BUILD_TYPE=Debug
288 -DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}/debug)
289
290 if(NINJA_HOST AND CMAKE_HOST_WIN32 AND NOT arg_DISABLE_PARALLEL_CONFIGURE)
291 list(APPEND arg_OPTIONS "-DCMAKE_DISABLE_SOURCE_CHANGES=ON")
292
293 vcpkg_find_acquire_program(NINJA)
294 get_filename_component(NINJA_PATH ${NINJA} DIRECTORY)
295 vcpkg_add_to_path("${NINJA_PATH}")
296
297 #parallelize the configure step
298 set(_contents
299 "rule CreateProcess\n command = $process\n\n"
300 )
301
302 macro(_build_cmakecache whereat build_type)
303 set(${build_type}_line "build ${whereat}/CMakeCache.txt: CreateProcess\n process = cmd /c \"cd ${whereat} &&")
304 foreach(arg ${${build_type}_command})
305 set(${build_type}_line "${${build_type}_line} \"${arg}\"")
306 endforeach()
307 set(_contents "${_contents}${${build_type}_line}\"\n\n")
308 endmacro()
309
310 if(NOT DEFINED VCPKG_BUILD_TYPE)
311 _build_cmakecache(".." "rel")
312 _build_cmakecache("../../${TARGET_TRIPLET}-dbg" "dbg")
313 elseif(VCPKG_BUILD_TYPE STREQUAL "release")
314 _build_cmakecache(".." "rel")
315 elseif(VCPKG_BUILD_TYPE STREQUAL "debug")
316 _build_cmakecache("../../${TARGET_TRIPLET}-dbg" "dbg")
317 endif()
318
319 file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure)
320 file(WRITE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure/build.ninja "${_contents}")
321
322 message(STATUS "Configuring ${TARGET_TRIPLET}")
323 vcpkg_execute_required_process(
324 COMMAND ninja -v
325 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure
326 LOGNAME ${arg_LOGNAME}
327 )
328 else()
329 if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
330 message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
331 file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
332 vcpkg_execute_required_process(
333 COMMAND ${dbg_command}
334 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
335 LOGNAME ${arg_LOGNAME}-dbg
336 )
337 endif()
338
339 if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
340 message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
341 file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
342 vcpkg_execute_required_process(
343 COMMAND ${rel_command}
344 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
345 LOGNAME ${arg_LOGNAME}-rel
346 )
347 endif()
348 endif()
349
350 set(Z_VCPKG_CMAKE_GENERATOR "${GENERATOR}" PARENT_SCOPE)
351 endfunction()