diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2016-09-18 20:50:08 -0700 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2016-09-18 20:54:03 -0700 |
| commit | ccca198c1b1730b0241911cb56dc8e3504958b2a (patch) | |
| tree | a2dd9b8b087a09afdcecc5cbb3377bed15127eb2 /scripts/cmake | |
| download | vcpkg-ccca198c1b1730b0241911cb56dc8e3504958b2a.tar.gz vcpkg-ccca198c1b1730b0241911cb56dc8e3504958b2a.zip | |
Initial commit
Diffstat (limited to 'scripts/cmake')
| -rw-r--r-- | scripts/cmake/vcpkg_apply_patches.cmake | 19 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_build_cmake.cmake | 17 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_build_msbuild.cmake | 32 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_common_functions.cmake | 10 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_configure_cmake.cmake | 54 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_copy_pdbs.cmake | 38 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_download_distfile.cmake | 20 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_execute_required_process.cmake | 21 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_extract_source_archive.cmake | 14 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_find_acquire_program.cmake | 51 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_install_cmake.cmake | 17 |
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() |
