aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/VcpkgPowershellUtils.ps19
-rw-r--r--scripts/buildsystems/vcpkg.cmake26
-rw-r--r--scripts/cmake/vcpkg_build_cmake.cmake22
-rw-r--r--scripts/cmake/vcpkg_build_msbuild.cmake23
-rw-r--r--scripts/cmake/vcpkg_configure_cmake.cmake53
-rw-r--r--scripts/cmake/vcpkg_find_acquire_program.cmake16
-rw-r--r--scripts/cmake/vcpkg_fixup_cmake_targets.cmake9
-rw-r--r--scripts/fetchTool.ps110
-rw-r--r--scripts/toolchains/android.cmake13
-rw-r--r--scripts/toolchains/freebsd.cmake4
-rw-r--r--scripts/toolchains/linux.cmake4
-rw-r--r--scripts/toolchains/osx.cmake4
-rw-r--r--scripts/toolchains/windows.cmake23
-rw-r--r--scripts/vcpkgTools.xml6
14 files changed, 157 insertions, 65 deletions
diff --git a/scripts/VcpkgPowershellUtils.ps1 b/scripts/VcpkgPowershellUtils.ps1
index 2dbf04085..d9c9e3760 100644
--- a/scripts/VcpkgPowershellUtils.ps1
+++ b/scripts/VcpkgPowershellUtils.ps1
@@ -140,6 +140,7 @@ function vcpkgDownloadFile( [Parameter(Mandatory=$true)][string]$url,
{
Write-Warning "Github has dropped support for TLS versions prior to 1.2, which is not available on your system"
Write-Warning "Please manually download $url to $downloadPath"
+ Write-Warning "To solve this issue for future downloads, you can also install Windows Management Framework 5.1+"
throw "Download failed"
}
}
@@ -172,10 +173,6 @@ function vcpkgExtractFile( [Parameter(Mandatory=$true)][string]$file,
vcpkgRemoveItem $destinationPartial
vcpkgCreateDirectoryIfNotExists $destinationPartial
- $shell = new-object -com shell.application
- $zip = $shell.NameSpace($(Get-Item $file).fullname)
- $itemCount = $zip.Items().Count
-
if (vcpkgHasCommand -commandName 'Microsoft.PowerShell.Archive\Expand-Archive')
{
Write-Verbose("Extracting with Microsoft.PowerShell.Archive\Expand-Archive")
@@ -189,6 +186,8 @@ function vcpkgExtractFile( [Parameter(Mandatory=$true)][string]$file,
else
{
Write-Verbose("Extracting via shell")
+ $shell = new-object -com shell.application
+ $zip = $shell.NameSpace($(Get-Item $file).fullname)
foreach($item in $zip.items())
{
# Piping to Out-Null is used to block until finished
@@ -196,6 +195,8 @@ function vcpkgExtractFile( [Parameter(Mandatory=$true)][string]$file,
}
}
+ $itemCount = @(Get-ChildItem "$destinationPartial").Count
+
if ($itemCount -eq 1)
{
Move-Item -Path "$destinationPartial\*" -Destination $output
diff --git a/scripts/buildsystems/vcpkg.cmake b/scripts/buildsystems/vcpkg.cmake
index ce5efc1de..10e3c3f13 100644
--- a/scripts/buildsystems/vcpkg.cmake
+++ b/scripts/buildsystems/vcpkg.cmake
@@ -57,12 +57,14 @@ endif()
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" OR CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone")
set(_VCPKG_TARGET_TRIPLET_PLAT uwp)
-elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux"))
set(_VCPKG_TARGET_TRIPLET_PLAT linux)
-elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin"))
set(_VCPKG_TARGET_TRIPLET_PLAT osx)
-else()
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows"))
set(_VCPKG_TARGET_TRIPLET_PLAT windows)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD"))
+ set(_VCPKG_TARGET_TRIPLET_PLAT freebsd)
endif()
set(VCPKG_TARGET_TRIPLET ${_VCPKG_TARGET_TRIPLET_ARCH}-${_VCPKG_TARGET_TRIPLET_PLAT} CACHE STRING "Vcpkg target triplet (ex. x86-windows)")
@@ -184,23 +186,17 @@ function(add_library name)
endfunction()
macro(find_package name)
- if("${name}" STREQUAL "Boost")
- set(_Boost_USE_STATIC_LIBS ${Boost_USE_STATIC_LIBS})
- set(_Boost_USE_MULTITHREADED ${Boost_USE_MULTITHREADED})
- set(_Boost_USE_STATIC_RUNTIME ${Boost_USE_STATIC_RUNTIME})
- set(_Boost_COMPILER ${Boost_COMPILER})
+ string(TOLOWER "${name}" _vcpkg_lowercase_name)
+ if(EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/share/${_vcpkg_lowercase_name}/vcpkg-cmake-wrapper.cmake")
+ set(ARGS "${ARGV}")
+ include(${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/share/${_vcpkg_lowercase_name}/vcpkg-cmake-wrapper.cmake)
+ elseif("${name}" STREQUAL "Boost" AND EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include/boost")
+ # Checking for the boost headers disables this wrapper unless the user has installed at least one boost library
unset(Boost_USE_STATIC_LIBS)
unset(Boost_USE_MULTITHREADED)
unset(Boost_USE_STATIC_RUNTIME)
set(Boost_COMPILER "-vc140")
_find_package(${ARGV})
- if(NOT Boost_FOUND)
- set(Boost_USE_STATIC_LIBS ${_Boost_USE_STATIC_LIBS})
- set(Boost_USE_MULTITHREADED ${_Boost_USE_MULTITHREADED})
- set(Boost_USE_STATIC_RUNTIME ${_Boost_USE_STATIC_RUNTIME})
- set(Boost_COMPILER ${_Boost_COMPILER})
- _find_package(${ARGV})
- endif()
elseif("${name}" STREQUAL "ICU")
function(_vcpkg_find_in_list)
list(FIND ARGV "COMPONENTS" COMPONENTS_IDX)
diff --git a/scripts/cmake/vcpkg_build_cmake.cmake b/scripts/cmake/vcpkg_build_cmake.cmake
index bdf192792..630662588 100644
--- a/scripts/cmake/vcpkg_build_cmake.cmake
+++ b/scripts/cmake/vcpkg_build_cmake.cmake
@@ -15,6 +15,9 @@
## The target passed to the cmake build command (`cmake --build . --target <target>`). If not specified, no target will
## be passed.
##
+## ### ADD_BIN_TO_PATH
+## Adds the appropriate Release and Debug `bin\` directories to the path during the build such that executables can run against the in-tree DLLs.
+##
## ## Notes:
## This command should be preceeded by a call to [`vcpkg_configure_cmake()`](vcpkg_configure_cmake.md).
## You can use the alias [`vcpkg_install_cmake()`](vcpkg_configure_cmake.md) function if your CMake script supports the
@@ -27,7 +30,7 @@
## * [poco](https://github.com/Microsoft/vcpkg/blob/master/ports/poco/portfile.cmake)
## * [opencv](https://github.com/Microsoft/vcpkg/blob/master/ports/opencv/portfile.cmake)
function(vcpkg_build_cmake)
- cmake_parse_arguments(_bc "DISABLE_PARALLEL" "TARGET;LOGFILE_ROOT" "" ${ARGN})
+ cmake_parse_arguments(_bc "DISABLE_PARALLEL;ADD_BIN_TO_PATH" "TARGET;LOGFILE_ROOT" "" ${ARGN})
if(NOT _bc_LOGFILE_ROOT)
set(_bc_LOGFILE_ROOT "build")
@@ -65,20 +68,24 @@ function(vcpkg_build_cmake)
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL BUILDTYPE)
if(BUILDTYPE STREQUAL "debug")
set(SHORT_BUILDTYPE "dbg")
+ set(CONFIG "Debug")
else()
set(SHORT_BUILDTYPE "rel")
+ set(CONFIG "Release")
endif()
message(STATUS "Build ${TARGET_TRIPLET}-${SHORT_BUILDTYPE}")
set(LOGPREFIX "${CURRENT_BUILDTREES_DIR}/${_bc_LOGFILE_ROOT}-${TARGET_TRIPLET}-${SHORT_BUILDTYPE}")
set(LOGS)
- if(BUILDTYPE STREQUAL "release")
- set(CONFIG "Release")
- else()
- set(CONFIG "Debug")
+ if(_bc_ADD_BIN_TO_PATH)
+ set(_BACKUP_ENV_PATH "$ENV{PATH}")
+ if(BUILDTYPE STREQUAL "debug")
+ set(ENV{PATH} "${CURRENT_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin;$ENV{PATH}")
+ else()
+ set(ENV{PATH} "${CURRENT_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin;$ENV{PATH}")
+ endif()
endif()
-
execute_process(
COMMAND ${CMAKE_COMMAND} --build . --config ${CONFIG} ${TARGET_PARAM} -- ${BUILD_ARGS} ${PARALLEL_ARG}
OUTPUT_FILE "${LOGPREFIX}-out.log"
@@ -134,6 +141,9 @@ function(vcpkg_build_cmake)
endif()
endif()
message(STATUS "Build ${TARGET_TRIPLET}-${SHORT_BUILDTYPE} done")
+ if(_bc_ADD_BIN_TO_PATH)
+ set(ENV{PATH} "${_BACKUP_ENV_PATH}")
+ endif()
endif()
endforeach()
endfunction()
diff --git a/scripts/cmake/vcpkg_build_msbuild.cmake b/scripts/cmake/vcpkg_build_msbuild.cmake
index b8403d277..db04530ef 100644
--- a/scripts/cmake/vcpkg_build_msbuild.cmake
+++ b/scripts/cmake/vcpkg_build_msbuild.cmake
@@ -19,6 +19,11 @@
## ```
##
## ## Parameters
+## ### USE_VCPKG_INTEGRATION
+## Apply the normal `integrate install` integration for building the project.
+##
+## By default, projects built with this command will not automatically link libraries or have header paths set.
+##
## ### PROJECT_PATH
## The path to the solution (`.sln`) or project (`.vcxproj`) file.
##
@@ -56,7 +61,13 @@
## * [cppunit](https://github.com/Microsoft/vcpkg/blob/master/ports/cppunit/portfile.cmake)
function(vcpkg_build_msbuild)
- cmake_parse_arguments(_csc "" "PROJECT_PATH;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION;PLATFORM;PLATFORM_TOOLSET;TARGET_PLATFORM_VERSION;TARGET" "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG" ${ARGN})
+ cmake_parse_arguments(
+ _csc
+ "USE_VCPKG_INTEGRATION"
+ "PROJECT_PATH;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION;PLATFORM;PLATFORM_TOOLSET;TARGET_PLATFORM_VERSION;TARGET"
+ "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG"
+ ${ARGN}
+ )
if(NOT DEFINED _csc_RELEASE_CONFIGURATION)
set(_csc_RELEASE_CONFIGURATION Release)
@@ -87,6 +98,16 @@ function(vcpkg_build_msbuild)
/m
)
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ # Disable LTCG for static libraries because this setting introduces ABI incompatibility between minor compiler versions
+ # TODO: Add a way for the user to override this if they want to opt-in to incompatibility
+ list(APPEND _csc_OPTIONS /p:WholeProgramOptimization=false)
+ endif()
+
+ if(_csc_USE_VCPKG_INTEGRATION)
+ list(APPEND _csc_OPTIONS /p:ForceImportBeforeCppTargets=${VCPKG_ROOT_DIR}/scripts/buildsystems/msbuild/vcpkg.targets)
+ endif()
+
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
message(STATUS "Building ${_csc_PROJECT_PATH} for Release")
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
diff --git a/scripts/cmake/vcpkg_configure_cmake.cmake b/scripts/cmake/vcpkg_configure_cmake.cmake
index e590fb8e7..4ab02f710 100644
--- a/scripts/cmake/vcpkg_configure_cmake.cmake
+++ b/scripts/cmake/vcpkg_configure_cmake.cmake
@@ -80,7 +80,7 @@ function(vcpkg_configure_cmake)
set(GENERATOR ${_csc_GENERATOR})
elseif(_csc_PREFER_NINJA AND NINJA_CAN_BE_USED)
set(GENERATOR "Ninja")
- elseif(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ elseif(VCPKG_CHAINLOAD_TOOLCHAIN_FILE OR (VCPKG_CMAKE_SYSTEM_NAME AND NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore"))
set(GENERATOR "Ninja")
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v120")
@@ -152,39 +152,14 @@ function(vcpkg_configure_cmake)
if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
- else()
- set(VCPKG_CXX_FLAGS " /DWIN32 /D_WINDOWS /W3 /utf-8 /GR /EHsc /MP ${VCPKG_CXX_FLAGS}")
- set(VCPKG_C_FLAGS " /DWIN32 /D_WINDOWS /W3 /utf-8 /MP ${VCPKG_C_FLAGS}")
- if(VCPKG_CRT_LINKAGE STREQUAL "dynamic")
- list(APPEND _csc_OPTIONS_DEBUG
- "-DCMAKE_CXX_FLAGS_DEBUG=/D_DEBUG /MDd /Z7 /Ob0 /Od /RTC1 ${VCPKG_CXX_FLAGS_DEBUG}"
- "-DCMAKE_C_FLAGS_DEBUG=/D_DEBUG /MDd /Z7 /Ob0 /Od /RTC1 ${VCPKG_C_FLAGS_DEBUG}"
- )
- list(APPEND _csc_OPTIONS_RELEASE
- "-DCMAKE_CXX_FLAGS_RELEASE=/MD /O2 /Oi /Gy /DNDEBUG /Z7 ${VCPKG_CXX_FLAGS_RELEASE}"
- "-DCMAKE_C_FLAGS_RELEASE=/MD /O2 /Oi /Gy /DNDEBUG /Z7 ${VCPKG_C_FLAGS_RELEASE}"
- )
- elseif(VCPKG_CRT_LINKAGE STREQUAL "static")
- list(APPEND _csc_OPTIONS_DEBUG
- "-DCMAKE_CXX_FLAGS_DEBUG=/D_DEBUG /MTd /Z7 /Ob0 /Od /RTC1 ${VCPKG_CXX_FLAGS_DEBUG}"
- "-DCMAKE_C_FLAGS_DEBUG=/D_DEBUG /MTd /Z7 /Ob0 /Od /RTC1 ${VCPKG_C_FLAGS_DEBUG}"
- )
- list(APPEND _csc_OPTIONS_RELEASE
- "-DCMAKE_CXX_FLAGS_RELEASE=/MT /O2 /Oi /Gy /DNDEBUG /Z7 ${VCPKG_CXX_FLAGS_RELEASE}"
- "-DCMAKE_C_FLAGS_RELEASE=/MT /O2 /Oi /Gy /DNDEBUG /Z7 ${VCPKG_C_FLAGS_RELEASE}"
- )
- else()
- message(FATAL_ERROR "Invalid setting for VCPKG_CRT_LINKAGE: \"${VCPKG_CRT_LINKAGE}\". It must be \"static\" or \"dynamic\"")
- endif()
-
- list(APPEND _csc_OPTIONS_RELEASE
- "-DCMAKE_SHARED_LINKER_FLAGS_RELEASE=/DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS}"
- "-DCMAKE_EXE_LINKER_FLAGS_RELEASE=/DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS}"
- )
- list(APPEND _csc_OPTIONS
- "-DCMAKE_CXX_FLAGS=${VCPKG_CXX_FLAGS}"
- "-DCMAKE_C_FLAGS=${VCPKG_C_FLAGS}"
- )
+ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" OR NOT DEFINED VCPKG_CMAKE_SYSTEM_NAME)
+ list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/toolchains/windows.cmake")
+ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/toolchains/linux.cmake")
+ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android")
+ list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/toolchains/android.cmake")
+ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/toolchains/osx.cmake")
endif()
list(APPEND _csc_OPTIONS
@@ -197,6 +172,16 @@ function(vcpkg_configure_cmake)
"-DVCPKG_APPLOCAL_DEPS=OFF"
"-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/buildsystems/vcpkg.cmake"
"-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON"
+ "-DVCPKG_CXX_FLAGS=${VCPKG_CXX_FLAGS}"
+ "-DVCPKG_CXX_FLAGS_RELEASE=${VCPKG_CXX_FLAGS_RELEASE}"
+ "-DVCPKG_CXX_FLAGS_DEBUG=${VCPKG_CXX_FLAGS_DEBUG}"
+ "-DVCPKG_C_FLAGS=${VCPKG_C_FLAGS}"
+ "-DVCPKG_C_FLAGS_RELEASE=${VCPKG_C_FLAGS_RELEASE}"
+ "-DVCPKG_C_FLAGS_DEBUG=${VCPKG_C_FLAGS_DEBUG}"
+ "-DVCPKG_CRT_LINKAGE=${VCPKG_CRT_LINKAGE}"
+ "-DVCPKG_LINKER_FLAGS=${VCPKG_LINKER_FLAGS}"
+ "-DCMAKE_INSTALL_LIBDIR:STRING=lib"
+ "-DCMAKE_INSTALL_BINDIR:STRING=bin"
)
if(DEFINED ARCH)
diff --git a/scripts/cmake/vcpkg_find_acquire_program.cmake b/scripts/cmake/vcpkg_find_acquire_program.cmake
index b24345021..083b86fc2 100644
--- a/scripts/cmake/vcpkg_find_acquire_program.cmake
+++ b/scripts/cmake/vcpkg_find_acquire_program.cmake
@@ -49,12 +49,16 @@ function(vcpkg_find_acquire_program VAR)
if(VAR MATCHES "PERL")
set(PROGNAME perl)
set(PATHS ${DOWNLOADS}/tools/perl/perl/bin)
+ set(BREW_PACKAGE_NAME "perl")
+ set(APT_PACKAGE_NAME "perl")
set(URL "http://strawberryperl.com/download/5.24.1.1/strawberry-perl-5.24.1.1-32bit-portable.zip")
set(ARCHIVE "strawberry-perl-5.24.1.1-32bit-portable.zip")
set(HASH a6e685ea24376f50db5f06c5b46075f1d3be25168fa1f27fa9b02e2ac017826cee62a2b43562f9b6c989337a231ba914416c110075457764de2d11f99d5e0f26)
elseif(VAR MATCHES "NASM")
set(PROGNAME nasm)
set(PATHS ${DOWNLOADS}/tools/nasm/nasm-2.12.02)
+ set(BREW_PACKAGE_NAME "nasm")
+ set(APT_PACKAGE_NAME "nasm")
set(URL
"http://www.nasm.us/pub/nasm/releasebuilds/2.12.02/win32/nasm-2.12.02-win32.zip"
"http://mirrors.kodi.tv/build-deps/win32/nasm-2.12.02-win32.zip"
@@ -106,6 +110,8 @@ function(vcpkg_find_acquire_program VAR)
set(PROGNAME ninja)
set(SUBDIR "ninja-1.8.2")
set(PATHS ${DOWNLOADS}/tools/ninja/${SUBDIR})
+ set(BREW_PACKAGE_NAME "ninja")
+ set(APT_PACKAGE_NAME "ninja-build")
set(URL "https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-win.zip")
set(ARCHIVE "ninja-1.8.2-win.zip")
set(HASH 9b9ce248240665fcd6404b989f3b3c27ed9682838225e6dc9b67b551774f251e4ff8a207504f941e7c811e7a8be1945e7bcb94472a335ef15e23a0200a32e6d5)
@@ -181,6 +187,16 @@ function(vcpkg_find_acquire_program VAR)
do_find()
if("${${VAR}}" MATCHES "-NOTFOUND")
+ if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ set(EXAMPLE ".")
+ if(DEFINED BREW_PACKAGE_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ set(EXAMPLE ":\n brew install ${BREW_PACKAGE_NAME}")
+ elseif(DEFINED APT_PACKAGE_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ set(EXAMPLE ":\n sudo apt-get install ${APT_PACKAGE_NAME}")
+ endif()
+ message(FATAL_ERROR "Could not find ${PROGNAME}. Please install it via your package manager${EXAMPLE}")
+ endif()
+
vcpkg_download_distfile(ARCHIVE_PATH
URLS ${URL}
SHA512 ${HASH}
diff --git a/scripts/cmake/vcpkg_fixup_cmake_targets.cmake b/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
index 4bd4d135f..7f1f827c2 100644
--- a/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
+++ b/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
@@ -158,4 +158,13 @@ function(vcpkg_fixup_cmake_targets)
if(NOT REMAINING_FILES)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share)
endif()
+
+ # Patch out any remaining absolute references
+ file(TO_CMAKE_PATH "${CURRENT_PACKAGES_DIR}" CMAKE_CURRENT_PACKAGES_DIR)
+ file(GLOB CMAKE_FILES ${RELEASE_SHARE}/*.cmake)
+ foreach(CMAKE_FILE IN LISTS CMAKE_FILES)
+ file(READ ${CMAKE_FILE} _contents)
+ string(REPLACE "${CMAKE_CURRENT_PACKAGES_DIR}" "\${CMAKE_CURRENT_LIST_DIR}/../.." _contents "${_contents}")
+ file(WRITE ${CMAKE_FILE} "${_contents}")
+ endforeach()
endfunction()
diff --git a/scripts/fetchTool.ps1 b/scripts/fetchTool.ps1
index 2c2f599ef..ff9b5d9bf 100644
--- a/scripts/fetchTool.ps1
+++ b/scripts/fetchTool.ps1
@@ -25,7 +25,7 @@ function fetchToolInternal([Parameter(Mandatory=$true)][string]$tool)
throw "Unkown tool $tool"
}
- $exePath = "$downloadsDir\$($toolData.exeRelativePath)"
+ $exePath = "$downloadsDir\$(@($toolData.exeRelativePath)[0])"
if (Test-Path $exePath)
{
@@ -35,14 +35,14 @@ function fetchToolInternal([Parameter(Mandatory=$true)][string]$tool)
$isArchive = vcpkgHasProperty -object $toolData -propertyName "archiveRelativePath"
if ($isArchive)
{
- $downloadPath = "$downloadsDir\$($toolData.archiveRelativePath)"
+ $downloadPath = "$downloadsDir\$(@($toolData.archiveRelativePath)[0])"
}
else
{
- $downloadPath = "$downloadsDir\$($toolData.exeRelativePath)"
+ $downloadPath = "$downloadsDir\$(@($toolData.exeRelativePath)[0])"
}
- $url = $toolData.url
+ [String]$url = @($toolData.url)[0]
if (!(Test-Path $downloadPath))
{
Write-Host "Downloading $tool..."
@@ -50,7 +50,7 @@ function fetchToolInternal([Parameter(Mandatory=$true)][string]$tool)
Write-Host "Downloading $tool has completed successfully."
}
- $expectedDownloadedFileHash = $toolData.sha256
+ $expectedDownloadedFileHash = @($toolData.sha256)[0]
$downloadedFileHash = vcpkgGetSHA256 $downloadPath
vcpkgCheckEqualFileHash -filePath $downloadPath -expectedHash $expectedDownloadedFileHash -actualHash $downloadedFileHash
diff --git a/scripts/toolchains/android.cmake b/scripts/toolchains/android.cmake
new file mode 100644
index 000000000..2a37e4c39
--- /dev/null
+++ b/scripts/toolchains/android.cmake
@@ -0,0 +1,13 @@
+
+set(ANDROID_CPP_FEATURES "rtti exceptions" CACHE STRING "")
+set(CMAKE_SYSTEM_NAME Android CACHE STRING "")
+set(ANDROID_ABI x86_64 CACHE STRING "")
+set(ANDROID_TOOLCHAIN clang CACHE STRING "")
+set(ANDROID_NATIVE_API_LEVEL 21 CACHE STRING "")
+set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION clang CACHE STRING "")
+
+if(NOT EXISTS "$ENV{ProgramData}/Microsoft/AndroidNDK64/android-ndk-r13b/build/cmake/android.toolchain.cmake")
+ message(FATAL_ERROR "Could not find android ndk. Searched at $ENV{ProgramData}/Microsoft/AndroidNDK64/android-ndk-r13b")
+endif()
+
+include("$ENV{ProgramData}/Microsoft/AndroidNDK64/android-ndk-r13b/build/cmake/android.toolchain.cmake")
diff --git a/scripts/toolchains/freebsd.cmake b/scripts/toolchains/freebsd.cmake
new file mode 100644
index 000000000..bfeabe18b
--- /dev/null
+++ b/scripts/toolchains/freebsd.cmake
@@ -0,0 +1,4 @@
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD")
+ set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
+endif()
+set(CMAKE_SYSTEM_NAME FreeBSD CACHE STRING "")
diff --git a/scripts/toolchains/linux.cmake b/scripts/toolchains/linux.cmake
new file mode 100644
index 000000000..ea4f15d60
--- /dev/null
+++ b/scripts/toolchains/linux.cmake
@@ -0,0 +1,4 @@
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
+endif()
+set(CMAKE_SYSTEM_NAME Linux CACHE STRING "")
diff --git a/scripts/toolchains/osx.cmake b/scripts/toolchains/osx.cmake
new file mode 100644
index 000000000..dd21f5264
--- /dev/null
+++ b/scripts/toolchains/osx.cmake
@@ -0,0 +1,4 @@
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
+endif()
+set(CMAKE_SYSTEM_NAME Darwin CACHE STRING "")
diff --git a/scripts/toolchains/windows.cmake b/scripts/toolchains/windows.cmake
new file mode 100644
index 000000000..7bfc2282b
--- /dev/null
+++ b/scripts/toolchains/windows.cmake
@@ -0,0 +1,23 @@
+get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE )
+if(NOT _CMAKE_IN_TRY_COMPILE)
+
+ if(VCPKG_CRT_LINKAGE STREQUAL "dynamic")
+ set(VCPKG_CRT_LINK_FLAG_PREFIX "/MD")
+ elseif(VCPKG_CRT_LINKAGE STREQUAL "static")
+ set(VCPKG_CRT_LINK_FLAG_PREFIX "/MT")
+ else()
+ message(FATAL_ERROR "Invalid setting for VCPKG_CRT_LINKAGE: \"${VCPKG_CRT_LINKAGE}\". It must be \"static\" or \"dynamic\"")
+ endif()
+
+ set(CMAKE_CXX_FLAGS " /DWIN32 /D_WINDOWS /W3 /utf-8 /GR /EHsc /MP ${VCPKG_CXX_FLAGS}" CACHE STRING "")
+ set(CMAKE_C_FLAGS " /DWIN32 /D_WINDOWS /W3 /utf-8 /MP ${VCPKG_C_FLAGS}" CACHE STRING "")
+
+ set(CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG ${VCPKG_CRT_LINK_FLAG_PREFIX}d /Z7 /Ob0 /Od /RTC1 ${VCPKG_CXX_FLAGS_DEBUG}" CACHE STRING "")
+ set(CMAKE_C_FLAGS_DEBUG "/D_DEBUG ${VCPKG_CRT_LINK_FLAG_PREFIX}d /Z7 /Ob0 /Od /RTC1 ${VCPKG_C_FLAGS_DEBUG}" CACHE STRING "")
+ set(CMAKE_CXX_FLAGS_RELEASE "${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG /Z7 ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "")
+ set(CMAKE_C_FLAGS_RELEASE "${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG /Z7 ${VCPKG_C_FLAGS_RELEASE}" CACHE STRING "")
+
+ set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS}" CACHE STRING "")
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS}" CACHE STRING "")
+
+endif()
diff --git a/scripts/vcpkgTools.xml b/scripts/vcpkgTools.xml
index 02fd0b996..9c78e92d9 100644
--- a/scripts/vcpkgTools.xml
+++ b/scripts/vcpkgTools.xml
@@ -6,6 +6,12 @@
<url>https://cmake.org/files/v3.10/cmake-3.10.2-win32-x86.zip</url>
<sha256>f5f7e41a21d0e9b655aca58498b08e17ecd27796bf82837e2c84435359169dd6</sha256>
<archiveRelativePath>cmake-3.10.2-win32-x86.zip</archiveRelativePath>
+ <exeRelativePath os="osx">cmake-3.10.2-Darwin-x86_64/CMake.app/Contents/bin/cmake</exeRelativePath>
+ <url os="osx">https://cmake.org/files/v3.10/cmake-3.10.2-Darwin-x86_64.tar.gz</url>
+ <archiveRelativePath os="osx">cmake-3.10.2-Darwin-x86_64.tar.gz</archiveRelativePath>
+ <exeRelativePath os="linux">cmake-3.10.2-Linux-x86_64/bin/cmake</exeRelativePath>
+ <url os="linux">https://cmake.org/files/v3.10/cmake-3.10.2-Linux-x86_64.tar.gz</url>
+ <archiveRelativePath os="linux">cmake-3.10.2-Linux-x86_64.tar.gz</archiveRelativePath>
</tool>
<tool name="git">
<requiredVersion>2.16.2</requiredVersion>