aboutsummaryrefslogtreecommitdiff
path: root/scripts/cmake
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2016-09-18 20:50:08 -0700
committerAlexander Karatarakis <alkarata@microsoft.com>2016-09-18 20:54:03 -0700
commitccca198c1b1730b0241911cb56dc8e3504958b2a (patch)
treea2dd9b8b087a09afdcecc5cbb3377bed15127eb2 /scripts/cmake
downloadvcpkg-ccca198c1b1730b0241911cb56dc8e3504958b2a.tar.gz
vcpkg-ccca198c1b1730b0241911cb56dc8e3504958b2a.zip
Initial commit
Diffstat (limited to 'scripts/cmake')
-rw-r--r--scripts/cmake/vcpkg_apply_patches.cmake19
-rw-r--r--scripts/cmake/vcpkg_build_cmake.cmake17
-rw-r--r--scripts/cmake/vcpkg_build_msbuild.cmake32
-rw-r--r--scripts/cmake/vcpkg_common_functions.cmake10
-rw-r--r--scripts/cmake/vcpkg_configure_cmake.cmake54
-rw-r--r--scripts/cmake/vcpkg_copy_pdbs.cmake38
-rw-r--r--scripts/cmake/vcpkg_download_distfile.cmake20
-rw-r--r--scripts/cmake/vcpkg_execute_required_process.cmake21
-rw-r--r--scripts/cmake/vcpkg_extract_source_archive.cmake14
-rw-r--r--scripts/cmake/vcpkg_find_acquire_program.cmake51
-rw-r--r--scripts/cmake/vcpkg_install_cmake.cmake17
11 files changed, 293 insertions, 0 deletions
diff --git a/scripts/cmake/vcpkg_apply_patches.cmake b/scripts/cmake/vcpkg_apply_patches.cmake
new file mode 100644
index 000000000..939edbd14
--- /dev/null
+++ b/scripts/cmake/vcpkg_apply_patches.cmake
@@ -0,0 +1,19 @@
+function(vcpkg_apply_patches)
+ cmake_parse_arguments(_ap "" "SOURCE_PATH" "PATCHES" ${ARGN})
+
+ find_program(GIT git)
+ set(PATCHNUM 0)
+ foreach(PATCH ${_ap_PATCHES})
+ message(STATUS "Applying patch ${PATCH}")
+ set(LOGNAME patch-${TARGET_TRIPLET}-${PATCHNUM})
+ execute_process(
+ COMMAND ${GIT} --work-tree=. apply "${PATCH}" --ignore-whitespace --whitespace=nowarn --verbose
+ OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/${LOGNAME}-out.log
+ ERROR_FILE ${CURRENT_BUILDTREES_DIR}/${LOGNAME}-err.log
+ WORKING_DIRECTORY ${_ap_SOURCE_PATH}
+ RESULT_VARIABLE error_code
+ )
+ message(STATUS "Applying patch ${PATCH} done")
+ math(EXPR PATCHNUM "${PATCHNUM}+1")
+ endforeach()
+endfunction()
diff --git a/scripts/cmake/vcpkg_build_cmake.cmake b/scripts/cmake/vcpkg_build_cmake.cmake
new file mode 100644
index 000000000..33990d9b0
--- /dev/null
+++ b/scripts/cmake/vcpkg_build_cmake.cmake
@@ -0,0 +1,17 @@
+function(vcpkg_build_cmake)
+ message(STATUS "Build ${TARGET_TRIPLET}-rel")
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} --build . --config Release -- /p:VCPkgLocalAppDataDisabled=true
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ LOGNAME build-${TARGET_TRIPLET}-rel
+ )
+ message(STATUS "Build ${TARGET_TRIPLET}-rel done")
+
+ message(STATUS "Build ${TARGET_TRIPLET}-dbg")
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} --build . --config Debug -- /p:VCPkgLocalAppDataDisabled=true
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ LOGNAME build-${TARGET_TRIPLET}-dbg
+ )
+ message(STATUS "Build ${TARGET_TRIPLET}-dbg done")
+endfunction()
diff --git a/scripts/cmake/vcpkg_build_msbuild.cmake b/scripts/cmake/vcpkg_build_msbuild.cmake
new file mode 100644
index 000000000..bf7c1b546
--- /dev/null
+++ b/scripts/cmake/vcpkg_build_msbuild.cmake
@@ -0,0 +1,32 @@
+function(vcpkg_build_msbuild)
+ cmake_parse_arguments(_csc "" "PROJECT_PATH;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" ${ARGN})
+
+ if(NOT DEFINED _csc_RELEASE_CONFIGURATION)
+ set(_csc_RELEASE_CONFIGURATION Release)
+ endif()
+ if(NOT DEFINED _csc_DEBUG_CONFIGURATION)
+ set(_csc_DEBUG_CONFIGURATION Debug)
+ endif()
+
+ message(STATUS "Building ${_csc_PROJECT_PATH} for Release")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ vcpkg_execute_required_process(
+ COMMAND msbuild ${_csc_PROJECT_PATH} ${_csc_OPTIONS} ${_csc_OPTIONS_RELEASE}
+ /p:Configuration=${_csc_RELEASE_CONFIGURATION}
+ /p:Platform=${TRIPLET_SYSTEM_ARCH}
+ /p:VCPkgLocalAppDataDisabled=true
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ LOGNAME build-${TARGET_TRIPLET}-rel
+ )
+
+ message(STATUS "Building ${_csc_PROJECT_PATH} for Debug")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ vcpkg_execute_required_process(
+ COMMAND msbuild ${_csc_PROJECT_PATH} ${_csc_OPTIONS} ${_csc_OPTIONS_DEBUG}
+ /p:Configuration=${_csc_DEBUG_CONFIGURATION}
+ /p:Platform=${TRIPLET_SYSTEM_ARCH}
+ /p:VCPkgLocalAppDataDisabled=true
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ LOGNAME build-${TARGET_TRIPLET}-dbg
+ )
+endfunction() \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_common_functions.cmake b/scripts/cmake/vcpkg_common_functions.cmake
new file mode 100644
index 000000000..59824eb17
--- /dev/null
+++ b/scripts/cmake/vcpkg_common_functions.cmake
@@ -0,0 +1,10 @@
+include(vcpkg_download_distfile)
+include(vcpkg_extract_source_archive)
+include(vcpkg_execute_required_process)
+include(vcpkg_find_acquire_program)
+include(vcpkg_build_cmake)
+include(vcpkg_build_msbuild)
+include(vcpkg_install_cmake)
+include(vcpkg_configure_cmake)
+include(vcpkg_apply_patches)
+include(vcpkg_copy_pdbs) \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_configure_cmake.cmake b/scripts/cmake/vcpkg_configure_cmake.cmake
new file mode 100644
index 000000000..aa85c8ff4
--- /dev/null
+++ b/scripts/cmake/vcpkg_configure_cmake.cmake
@@ -0,0 +1,54 @@
+find_program(vcpkg_configure_cmake_NINJA ninja)
+function(vcpkg_configure_cmake)
+ cmake_parse_arguments(_csc "" "SOURCE_PATH;GENERATOR" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" ${ARGN})
+
+ if(_csc_GENERATOR)
+ set(GENERATOR ${_csc_GENERATOR})
+ elseif(TRIPLET_SYSTEM_NAME MATCHES "uwp" AND TRIPLET_SYSTEM_ARCH MATCHES "x86")
+ set(GENERATOR "Visual Studio 14 2015")
+ elseif(TRIPLET_SYSTEM_NAME MATCHES "uwp" AND TRIPLET_SYSTEM_ARCH MATCHES "x64")
+ set(GENERATOR "Visual Studio 14 2015 Win64")
+ elseif(TRIPLET_SYSTEM_NAME MATCHES "uwp" AND TRIPLET_SYSTEM_ARCH MATCHES "arm")
+ set(GENERATOR "Visual Studio 14 2015 ARM")
+ # elseif(NOT vcpkg_configure_cmake_NINJA MATCHES "NOTFOUND")
+ # set(GENERATOR "Ninja")
+ elseif(TRIPLET_SYSTEM_ARCH MATCHES "x86")
+ set(GENERATOR "Visual Studio 14 2015")
+ elseif(TRIPLET_SYSTEM_ARCH MATCHES "x64")
+ set(GENERATOR "Visual Studio 14 2015 Win64")
+ elseif(TRIPLET_SYSTEM_ARCH MATCHES "arm")
+ set(GENERATOR "Visual Studio 14 2015 ARM")
+ endif()
+
+ file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+
+ message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} ${_csc_SOURCE_PATH} ${_csc_OPTIONS} ${_csc_OPTIONS_RELEASE}
+ -G ${GENERATOR}
+ -DCMAKE_VERBOSE_MAKEFILE=ON
+ -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DCMAKE_PREFIX_PATH=${CURRENT_INSTALLED_DIR}
+ -DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ LOGNAME config-${TARGET_TRIPLET}-rel
+ )
+ message(STATUS "Configuring ${TARGET_TRIPLET}-rel done")
+
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} ${_csc_SOURCE_PATH} ${_csc_OPTIONS} ${_csc_OPTIONS_DEBUG}
+ -G ${GENERATOR}
+ -DCMAKE_VERBOSE_MAKEFILE=ON
+ -DCMAKE_BUILD_TYPE=Debug
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DCMAKE_PREFIX_PATH=${CURRENT_INSTALLED_DIR}/debug\\\\\\\;${CURRENT_INSTALLED_DIR}
+ -DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}/debug
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ LOGNAME config-${TARGET_TRIPLET}-dbg
+ )
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg done")
+endfunction() \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_copy_pdbs.cmake b/scripts/cmake/vcpkg_copy_pdbs.cmake
new file mode 100644
index 000000000..b99649d59
--- /dev/null
+++ b/scripts/cmake/vcpkg_copy_pdbs.cmake
@@ -0,0 +1,38 @@
+function(vcpkg_copy_pdbs)
+ function(merge_filelist OUTVAR INVAR)
+ set(MSG "")
+ foreach(VAR ${${INVAR}})
+ set(MSG "${MSG} ${VAR}\n")
+ endforeach()
+ set(${OUTVAR} ${MSG} PARENT_SCOPE)
+ endfunction()
+
+ file(GLOB_RECURSE DLLS ${CURRENT_PACKAGES_DIR}/bin/*.dll ${CURRENT_PACKAGES_DIR}/debug/bin/*.dll)
+
+ set(DLLS_WITHOUT_MATCHING_PDBS)
+
+ foreach(DLL ${DLLS})
+ execute_process(COMMAND dumpbin /PDBPATH ${DLL}
+ COMMAND findstr PDB
+ OUTPUT_VARIABLE PDB_LINE
+ ERROR_QUIET
+ RESULT_VARIABLE error_code
+ )
+
+ if(NOT error_code AND PDB_LINE MATCHES "PDB file found at")
+ string(REGEX MATCH '.*' PDB_PATH ${PDB_LINE}) # Extract the path which is in single quotes
+ string(REPLACE ' "" PDB_PATH ${PDB_PATH}) # Remove single quotes
+ get_filename_component(DLL_DIR ${DLL} DIRECTORY)
+ file(COPY ${PDB_PATH} DESTINATION ${DLL_DIR})
+ else()
+ list(APPEND DLLS_WITHOUT_MATCHING_PDBS ${DLL})
+ endif()
+ endforeach()
+
+ list(LENGTH DLLS_WITHOUT_MATCHING_PDBS UNMATCHED_DLLS_LENGTH)
+ if(UNMATCHED_DLLS_LENGTH GREATER 0)
+ merge_filelist(MSG DLLS_WITHOUT_MATCHING_PDBS)
+ message(STATUS "Warning: Could not find a matching pdb file for:\n${MSG}")
+ endif()
+
+endfunction() \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_download_distfile.cmake b/scripts/cmake/vcpkg_download_distfile.cmake
new file mode 100644
index 000000000..7c36f5d97
--- /dev/null
+++ b/scripts/cmake/vcpkg_download_distfile.cmake
@@ -0,0 +1,20 @@
+# Usage: vcpkg_download_distfile(<VAR> URL <http://...> FILENAME <output.zip> MD5 <5981de...>)
+function(vcpkg_download_distfile VAR)
+ set(oneValueArgs URL FILENAME MD5)
+ cmake_parse_arguments(vcpkg_download_distfile "" "${oneValueArgs}" "" ${ARGN})
+
+ if(EXISTS ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME})
+ message(STATUS "Using cached ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME}")
+ file(MD5 ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME} FILE_HASH)
+ if(NOT FILE_HASH MATCHES ${vcpkg_download_distfile_MD5})
+ message(FATAL_ERROR
+ "File does not have expected hash: ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME}\n"
+ " ${FILE_HASH} <> ${vcpkg_download_distfile_MD5}\n"
+ "Please delete the file and try again if this file should be downloaded again.")
+ endif()
+ else()
+ message(STATUS "Downloading ${vcpkg_download_distfile_URL}")
+ file(DOWNLOAD ${vcpkg_download_distfile_URL} ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME} EXPECTED_HASH MD5=${vcpkg_download_distfile_MD5})
+ endif()
+ set(${VAR} ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME} PARENT_SCOPE)
+endfunction()
diff --git a/scripts/cmake/vcpkg_execute_required_process.cmake b/scripts/cmake/vcpkg_execute_required_process.cmake
new file mode 100644
index 000000000..bd6e56f7b
--- /dev/null
+++ b/scripts/cmake/vcpkg_execute_required_process.cmake
@@ -0,0 +1,21 @@
+# Usage: vcpkg_execute_required_process(COMMAND <cmd> [<args>...] WORKING_DIRECTORY </path/to/dir> LOGNAME <my_log_name>)
+function(vcpkg_execute_required_process)
+ cmake_parse_arguments(vcpkg_execute_required_process "" "WORKING_DIRECTORY;LOGNAME" "COMMAND" ${ARGN})
+ #debug_message("vcpkg_execute_required_process(${vcpkg_execute_required_process_COMMAND})")
+ execute_process(
+ COMMAND ${vcpkg_execute_required_process_COMMAND}
+ OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_LOGNAME}-out.log
+ ERROR_FILE ${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_LOGNAME}-err.log
+ RESULT_VARIABLE error_code
+ WORKING_DIRECTORY ${vcpkg_execute_required_process_WORKING_DIRECTORY})
+ #debug_message("error_code=${error_code}")
+ file(TO_NATIVE_PATH "${CURRENT_BUILDTREES_DIR}" NATIVE_BUILDTREES_DIR)
+ if(error_code)
+ message(FATAL_ERROR
+ "Command failed: ${vcpkg_execute_required_process_COMMAND}\n"
+ "Working Directory: ${vcpkg_execute_required_process_WORKING_DIRECTORY}\n"
+ "See logs for more information:\n"
+ " ${NATIVE_BUILDTREES_DIR}\\${vcpkg_execute_required_process_LOGNAME}-out.log\n"
+ " ${NATIVE_BUILDTREES_DIR}\\${vcpkg_execute_required_process_LOGNAME}-err.log\n")
+ endif()
+endfunction()
diff --git a/scripts/cmake/vcpkg_extract_source_archive.cmake b/scripts/cmake/vcpkg_extract_source_archive.cmake
new file mode 100644
index 000000000..d970bb8b2
--- /dev/null
+++ b/scripts/cmake/vcpkg_extract_source_archive.cmake
@@ -0,0 +1,14 @@
+include(vcpkg_execute_required_process)
+
+function(vcpkg_extract_source_archive ARCHIVE)
+ if(NOT EXISTS ${CURRENT_BUILDTREES_DIR}/src)
+ message(STATUS "Extracting source ${ARCHIVE}")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/src)
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} -E tar xjf ${ARCHIVE}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/src
+ LOGNAME extract
+ )
+ endif()
+ message(STATUS "Extracting done")
+endfunction()
diff --git a/scripts/cmake/vcpkg_find_acquire_program.cmake b/scripts/cmake/vcpkg_find_acquire_program.cmake
new file mode 100644
index 000000000..ce2cdaa26
--- /dev/null
+++ b/scripts/cmake/vcpkg_find_acquire_program.cmake
@@ -0,0 +1,51 @@
+function(vcpkg_find_acquire_program VAR)
+ if(${VAR} AND NOT ${VAR} MATCHES "-NOTFOUND")
+ return()
+ endif()
+
+ unset(NOEXTRACT)
+
+ if(VAR MATCHES "PERL")
+ set(PROGNAME perl)
+ set(PATHS ${DOWNLOADS}/tools/perl/perl/bin)
+ set(URL "http://strawberryperl.com/download/5.20.2.1/strawberry-perl-5.20.2.1-64bit-portable.zip")
+ set(ARCHIVE "strawberry-perl-5.20.2.1-64bit-portable.zip")
+ set(HASH 5fca4b3cfa7c9cc95e0c4fd8652eba80)
+ elseif(VAR MATCHES "NASM")
+ set(PROGNAME nasm)
+ set(PATHS ${DOWNLOADS}/tools/nasm/nasm-2.11.08)
+ set(URL "http://www.nasm.us/pub/nasm/releasebuilds/2.11.08/win32/nasm-2.11.08-win32.zip")
+ set(ARCHIVE "nasm-2.11.08-win32.zip")
+ set(HASH 46a31e22be69637f7a9ccba12874133f)
+ elseif(VAR MATCHES "YASM")
+ set(PROGNAME yasm)
+ set(PATHS ${DOWNLOADS}/tools/yasm)
+ set(URL "http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win32.exe")
+ set(ARCHIVE "yasm.exe")
+ set(NOEXTRACT ON)
+ set(HASH 51e967dceddd1f84e67bff255df977b3)
+ else()
+ message(FATAL "unknown tool ${VAR} -- unable to acquire.")
+ endif()
+
+ find_program(${VAR} ${PROGNAME} PATHS ${PATHS})
+ if(${VAR} MATCHES "-NOTFOUND")
+ file(DOWNLOAD ${URL} ${DOWNLOADS}/${ARCHIVE}
+ EXPECTED_MD5 ${HASH}
+ SHOW_PROGRESS
+ )
+ file(MAKE_DIRECTORY ${DOWNLOADS}/tools/${PROGNAME})
+ if(DEFINED NOEXTRACT)
+ file(COPY ${DOWNLOADS}/${ARCHIVE} DESTINATION ${DOWNLOADS}/tools/${PROGNAME})
+ else()
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E tar xzf ${DOWNLOADS}/${ARCHIVE}
+ WORKING_DIRECTORY ${DOWNLOADS}/tools/${PROGNAME}
+ )
+ endif()
+
+ find_program(${VAR} ${PROGNAME} PATHS ${PATHS})
+ endif()
+
+ set(${VAR} ${${VAR}} PARENT_SCOPE)
+endfunction()
diff --git a/scripts/cmake/vcpkg_install_cmake.cmake b/scripts/cmake/vcpkg_install_cmake.cmake
new file mode 100644
index 000000000..14f1bc94d
--- /dev/null
+++ b/scripts/cmake/vcpkg_install_cmake.cmake
@@ -0,0 +1,17 @@
+function(vcpkg_install_cmake)
+ message(STATUS "Package ${TARGET_TRIPLET}-rel")
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} --build . --config Release --target install
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ LOGNAME package-${TARGET_TRIPLET}-rel
+ )
+ message(STATUS "Package ${TARGET_TRIPLET}-rel done")
+
+ message(STATUS "Package ${TARGET_TRIPLET}-dbg")
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} --build . --config Debug --target install
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ LOGNAME package-${TARGET_TRIPLET}-dbg
+ )
+ message(STATUS "Package ${TARGET_TRIPLET}-dbg done")
+endfunction()