2023-12-26 05:51:49 +00:00
include ( FetchContent )
set ( _DEFAULT_VCPKG_ROOT "${CMAKE_SOURCE_DIR}/vcpkg" )
set ( VCPKG_ROOT "${_DEFAULT_VCPKG_ROOT}" CACHE STRING "The path to the vcpkg repository" )
if ( VCPKG_ROOT STREQUAL "${_DEFAULT_VCPKG_ROOT}" )
2024-07-27 15:22:35 +00:00
if ( APPLE ) # this doesn't work on non-macOS
file ( LOCK "${_DEFAULT_VCPKG_ROOT}" DIRECTORY GUARD FILE )
endif ( )
2023-12-26 05:51:49 +00:00
FetchContent_Declare ( vcpkg
G I T _ R E P O S I T O R Y " h t t p s : / / g i t h u b . c o m / M i c r o s o f t / v c p k g . g i t "
2024-09-06 11:39:42 +00:00
G I T _ T A G 2 0 2 4 . 0 8 . 2 3
2023-12-26 05:51:49 +00:00
S O U R C E _ D I R " $ { C M A K E _ S O U R C E _ D I R } / v c p k g " )
FetchContent_MakeAvailable ( vcpkg )
endif ( )
set ( VCPKG_OVERLAY_TRIPLETS "${CMAKE_SOURCE_DIR}/cmake/overlay-triplets" )
option ( USE_RECOMMENDED_TRIPLETS "Use the recommended triplets that are used for official builds" ON )
2024-07-27 15:22:35 +00:00
# Duplicated here because it needs to be set before project()
if ( NOT WIN32 )
option ( USE_QT6 "Build using Qt 6 instead of 5" ON )
else ( )
option ( USE_QT6 "Build using Qt 6 instead of 5" OFF )
endif ( )
2024-09-06 20:50:12 +00:00
# Since the Linux build pulls in glib anyway, we can just use upstream libslirp
if ( UNIX AND NOT APPLE )
option ( USE_SYSTEM_LIBSLIRP "Use system libslirp instead of the bundled version" ON )
endif ( )
2024-07-27 15:22:35 +00:00
if ( NOT USE_QT6 )
list ( APPEND VCPKG_MANIFEST_FEATURES qt5 )
set ( VCPKG_MANIFEST_NO_DEFAULT_FEATURES ON )
endif ( )
2023-12-26 05:51:49 +00:00
if ( CMAKE_OSX_ARCHITECTURES MATCHES ";" )
message ( FATAL_ERROR "macOS universal builds are not supported. Build them individually and combine afterwards instead." )
endif ( )
if ( USE_RECOMMENDED_TRIPLETS )
execute_process (
C O M M A N D u n a m e - m
O U T P U T _ V A R I A B L E _ H O S T _ P R O C E S S O R
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
set ( _CAN_TARGET_AS_HOST OFF )
if ( APPLE )
if ( NOT CMAKE_OSX_ARCHITECTURES )
if ( _HOST_PROCESSOR STREQUAL arm64 )
set ( CMAKE_OSX_ARCHITECTURES arm64 )
else ( )
set ( CMAKE_OSX_ARCHITECTURES x86_64 )
endif ( )
endif ( )
if ( CMAKE_OSX_ARCHITECTURES STREQUAL arm64 )
set ( _WANTED_TRIPLET arm64-osx-11-release )
set ( CMAKE_OSX_DEPLOYMENT_TARGET 11.0 )
else ( )
set ( _WANTED_TRIPLET x64-osx-1015-release )
set ( CMAKE_OSX_DEPLOYMENT_TARGET 10.15 )
endif ( )
elseif ( WIN32 )
# TODO Windows arm64 if possible
set ( _CAN_TARGET_AS_HOST ON )
2024-07-27 15:22:35 +00:00
set ( _WANTED_TRIPLET x64-mingw-static-release )
2024-09-06 20:50:12 +00:00
elseif ( CMAKE_HOST_SYSTEM_NAME STREQUAL Linux )
# Can't really detect cross compiling here.
set ( _CAN_TARGET_AS_HOST ON )
if ( _HOST_PROCESSOR STREQUAL x86_64 )
set ( _WANTED_TRIPLET x64-linux-release )
elseif ( _HOST_PROCESSOR STREQUAL "aarch64" )
set ( _WANTED_TRIPLET arm64-linux-release )
endif ( )
2023-12-26 05:51:49 +00:00
endif ( )
# Don't override it if the user set something else
if ( NOT VCPKG_TARGET_TRIPLET )
set ( VCPKG_TARGET_TRIPLET "${_WANTED_TRIPLET}" )
else ( )
set ( _WANTED_TRIPLET "${VCPKG_TARGET_TRIPLET}" )
endif ( )
if ( APPLE )
if ( _HOST_PROCESSOR MATCHES arm64 )
if ( _WANTED_TRIPLET MATCHES "^arm64-osx-" )
set ( _CAN_TARGET_AS_HOST ON )
elseif ( _WANTED_TRIPLET STREQUAL "x64-osx-1015-release" )
# Use the default triplet for when building for arm64
# because we're probably making a universal build
set ( VCPKG_HOST_TRIPLET arm64-osx-11-release )
endif ( )
else ( )
if ( _WANTED_TRIPLET MATCHES "^x64-osx-" )
set ( _CAN_TARGET_AS_HOST ON )
elseif ( _WANTED_TRIPLET STREQUAL "arm64-osx-11-release" )
set ( VCPKG_HOST_TRIPLET x64-osx-1015-release )
endif ( )
endif ( )
endif ( )
# If host and target triplet differ, vcpkg seems to always assume that the host can't run the target's binaries.
# In cases like cross compiling from ARM -> Intel macOS, or target being an older version of the host OS, we *can* do that so the packages built targeting the host are redundant.
if ( _CAN_TARGET_AS_HOST AND NOT VCPKG_HOST_TRIPLET )
option ( VCPKG_TARGET_AS_HOST "Use the target as host triplet to speed up builds" ON )
else ( )
option ( VCPKG_TARGET_AS_HOST "Use the target as host triplet to speed up builds" OFF )
endif ( )
if ( VCPKG_TARGET_AS_HOST )
set ( VCPKG_HOST_TRIPLET "${VCPKG_TARGET_TRIPLET}" CACHE STRING "Host triplet to use for vcpkg" )
endif ( )
endif ( )
set ( CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" )