Skip to content

Commit

Permalink
[vcpkg_build_cmake] Refactor _build_ and _install_ into a single cmak…
Browse files Browse the repository at this point in the history
…e script.

Regenerate documentation. Remove MSVC_64_TOOLSET option because it's obsolete.
  • Loading branch information
ras0219-msft committed Oct 6, 2017
1 parent 06798b6 commit 2c9ee07
Show file tree
Hide file tree
Showing 12 changed files with 141 additions and 85 deletions.
2 changes: 2 additions & 0 deletions docs/maintainers/portfile-functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# Portfile helper functions
- [vcpkg\_acquire\_msys](vcpkg_acquire_msys.md)
- [vcpkg\_apply\_patches](vcpkg_apply_patches.md)
- [vcpkg\_build\_cmake](vcpkg_build_cmake.md)
- [vcpkg\_build\_msbuild](vcpkg_build_msbuild.md)
- [vcpkg\_configure\_cmake](vcpkg_configure_cmake.md)
- [vcpkg\_copy\_pdbs](vcpkg_copy_pdbs.md)
Expand All @@ -11,5 +12,6 @@
- [vcpkg\_execute\_required\_process](vcpkg_execute_required_process.md)
- [vcpkg\_extract\_source\_archive](vcpkg_extract_source_archive.md)
- [vcpkg\_find\_acquire\_program](vcpkg_find_acquire_program.md)
- [vcpkg\_from\_bitbucket](vcpkg_from_bitbucket.md)
- [vcpkg\_from\_github](vcpkg_from_github.md)
- [vcpkg\_install\_cmake](vcpkg_install_cmake.md)
2 changes: 1 addition & 1 deletion docs/maintainers/vcpkg_acquire_msys.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ message(STATUS "Installing MSYS Packages")
vcpkg_execute_required_process(
COMMAND
${BASH} --noprofile --norc -c
"pacman -Sy --noconfirm --needed make"
'PATH=/usr/bin:\$PATH pacman -Sy --noconfirm --needed make'
WORKING_DIRECTORY ${MSYS_ROOT}
LOGNAME pacman-${TARGET_TRIPLET})
```
Expand Down
31 changes: 31 additions & 0 deletions docs/maintainers/vcpkg_build_cmake.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# vcpkg_build_cmake

Build a cmake project.

## Usage:
```cmake
vcpkg_build_cmake([DISABLE_PARALLEL] [TARGET <target>])
```

## Parameters:
### DISABLE_PARALLEL
The underlying buildsystem will be instructed to not parallelize

### TARGET
The target passed to the cmake build command (`cmake --build . --target <target>`). If not specified, no target will
be passed.

## 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
"install" target

## Examples:

* [zlib](https://github.com/Microsoft/vcpkg/blob/master/ports/zlib/portfile.cmake)
* [cpprestsdk](https://github.com/Microsoft/vcpkg/blob/master/ports/cpprestsdk/portfile.cmake)
* [poco](https://github.com/Microsoft/vcpkg/blob/master/ports/poco/portfile.cmake)
* [opencv](https://github.com/Microsoft/vcpkg/blob/master/ports/opencv/portfile.cmake)

## Source
[scripts/cmake/vcpkg_build_cmake.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_build_cmake.cmake)
2 changes: 1 addition & 1 deletion docs/maintainers/vcpkg_find_acquire_program.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ The current list of programs includes:
- 7Z
- BISON
- FLEX
- GASPREPROCESSOR
- PERL
- PYTHON2
- PYTHON3
Expand All @@ -24,7 +25,6 @@ The current list of programs includes:
- NASM
- NINJA
- YASM
- GASPREPROCESSOR

Note that msys2 has a dedicated helper function: [`vcpkg_acquire_msys`](vcpkg_acquire_msys.md).

Expand Down
53 changes: 53 additions & 0 deletions docs/maintainers/vcpkg_from_bitbucket.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# vcpkg_from_bitbucket

Download and extract a project from Bitbucket.
Enables support for installing HEAD `vcpkg.exe install --head <port>`.

## Usage:
```cmake
vcpkg_from_bitbucket(
OUT_SOURCE_PATH <SOURCE_PATH>
REPO <Microsoft/cpprestsdk>
[REF <v2.0.0>]
[SHA512 <45d0d7f8cc350...>]
[HEAD_REF <master>]
)
```

## Parameters:
### OUT_SOURCE_PATH
Specifies the out-variable that will contain the extracted location.

This should be set to `SOURCE_PATH` by convention.

### REPO
The organization or user and repository on GitHub.

### REF
A stable git commit-ish (ideally a tag) that will not change contents. **This should not be a branch.**

For repositories without official releases, this can be set to the full commit id of the current latest master.

If `REF` is specified, `SHA512` must also be specified.

### SHA512
The SHA512 hash that should match the archive (https://bitbucket.com/${REPO}/get/${REF}.tar.gz).

This is most easily determined by first setting it to `1`, then trying to build the port. The error message will contain the full hash, which can be copied back into the portfile.

### HEAD_REF
The unstable git commit-ish (ideally a branch) to pull for `--head` builds.

For most projects, this should be `master`. The chosen branch should be one that is expected to be always buildable on all supported platforms.

## Notes:
At least one of `REF` and `HEAD_REF` must be specified, however it is preferable for both to be present.

This exports the `VCPKG_HEAD_VERSION` variable during head builds.

## Examples:

* [blaze](https://github.com/Microsoft/vcpkg/blob/master/ports/blaze/portfile.cmake)

## Source
[scripts/cmake/vcpkg_from_bitbucket.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_from_bitbucket.cmake)
6 changes: 4 additions & 2 deletions docs/maintainers/vcpkg_from_github.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ This should be set to `SOURCE_PATH` by convention.
The organization or user and repository on GitHub.

### REF
A stable git commit-ish (ideally a tag) that will not change contents.
A stable git commit-ish (ideally a tag) that will not change contents. **This should not be a branch.**

For repositories without official releases, this can be set to the full commit id of the current latest master.

If `REF` is specified, `SHA512` must also be specified.

Expand All @@ -38,7 +40,7 @@ The unstable git commit-ish (ideally a branch) to pull for `--head` builds.
For most projects, this should be `master`. The chosen branch should be one that is expected to be always buildable on all supported platforms.

## Notes:
At least one of `REF` and `HEAD_REF` must be specified.
At least one of `REF` and `HEAD_REF` must be specified, however it is preferable for both to be present.

This exports the `VCPKG_HEAD_VERSION` variable during head builds.

Expand Down
8 changes: 4 additions & 4 deletions docs/maintainers/vcpkg_install_cmake.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ Build and install a cmake project.

## Usage:
```cmake
vcpkg_install_cmake([MSVC_64_TOOLSET])
vcpkg_install_cmake(...)
```

## Parameters:
### MSVC_64_TOOLSET
This adds the `/p:PreferredToolArchitecture=x64` switch if the underlying buildsystem is MSBuild. Some large projects can run out of memory when linking if they use the 32-bit hosted tools.
See [`vcpkg_build_cmake()`](vcpkg_build_cmake.md).

## Notes:
This command should be preceeded by a call to [`vcpkg_configure_cmake()`](vcpkg_configure_cmake.md).
This command transparently forwards to [`vcpkg_build_cmake()`](vcpkg_build_cmake.md), adding a `TARGET install`
parameter.

## Examples:

Expand Down
2 changes: 1 addition & 1 deletion ports/folly/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ vcpkg_configure_cmake(
# Folly runs built executables during the build, so they need access to the installed DLLs.
set(ENV{PATH} "$ENV{PATH};${CURRENT_INSTALLED_DIR}/bin;${CURRENT_INSTALLED_DIR}/debug/bin")

vcpkg_install_cmake(MSVC_64_TOOLSET)
vcpkg_install_cmake()

vcpkg_copy_pdbs()

Expand Down
3 changes: 1 addition & 2 deletions ports/protobuf/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@ vcpkg_configure_cmake(
-DCMAKE_INSTALL_CMAKEDIR=share/protobuf
)

# Using 64-bit toolset to avoid occassional Linker Out-of-Memory issues.
vcpkg_install_cmake(MSVC_64_TOOLSET)
vcpkg_install_cmake()

# It appears that at this point the build hasn't actually finished. There is probably
# a process spawned by the build, therefore we need to wait a bit.
Expand Down
65 changes: 36 additions & 29 deletions scripts/cmake/vcpkg_build_cmake.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,21 @@
##
## ## Usage:
## ```cmake
## vcpkg_build_cmake([MSVC_64_TOOLSET] [DISABLE_PARALLEL])
## vcpkg_build_cmake([DISABLE_PARALLEL] [TARGET <target>])
## ```
##
## ## Parameters:
## ### MSVC_64_TOOLSET
## This adds the `/p:PreferredToolArchitecture=x64` switch to the underlying buildsystem parameters. Some large projects can run out of memory when linking if they use the 32-bit hosted tools.
##
## ### DISABLE_PARALLEL
## The /m parameter will not be added to the underlying buildsystem parameters
## The underlying buildsystem will be instructed to not parallelize
##
## ### TARGET
## The target passed to the cmake build command (`cmake --build . --target <target>`). If not specified, no target will
## be passed.
##
## ## Notes:
## This command should be preceeded by a call to [`vcpkg_configure_cmake()`](vcpkg_configure_cmake.md).
## Use [`vcpkg_install_cmake()`](vcpkg_configure_cmake.md) function if your CMake script supports the "install" target
## You can use the alias [`vcpkg_install_cmake()`](vcpkg_configure_cmake.md) function if your CMake script supports the
## "install" target
##
## ## Examples:
##
Expand All @@ -25,45 +27,50 @@
## * [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 "MSVC_64_TOOLSET;DISABLE_PARALLEL" "" "" ${ARGN})

set(MSVC_EXTRA_ARGS
"/p:VCPkgLocalAppDataDisabled=true"
"/p:UseIntelMKL=No"
)
cmake_parse_arguments(_bc "DISABLE_PARALLEL" "TARGET;LOGFILE_ROOT" "" ${ARGN})

# Specifies the architecture of the toolset, NOT the architecture of the produced binary
# This can help libraries that cause the linker to run out of memory.
# https://support.microsoft.com/en-us/help/2891057/linker-fatal-error-lnk1102-out-of-memory
if (_bc_MSVC_64_TOOLSET)
list(APPEND MSVC_EXTRA_ARGS "/p:PreferredToolArchitecture=x64")
if(NOT _bc_LOGFILE_ROOT)
set(_bc_LOGFILE_ROOT "build")
endif()

if (NOT _bc_DISABLE_PARALLEL)
list(APPEND MSVC_EXTRA_ARGS "/m")
if(_VCPKG_CMAKE_GENERATOR MATCHES "Ninja")
set(BUILD_ARGS "-v") # verbose output
if (_bc_DISABLE_PARALLEL)
list(APPEND BUILD_ARGS "-j1")
endif()
elseif(_VCPKG_CMAKE_GENERATOR MATCHES "Visual Studio")
set(BUILD_ARGS
"/p:VCPkgLocalAppDataDisabled=true"
"/p:UseIntelMKL=No"
)
if (NOT _bc_DISABLE_PARALLEL)
list(APPEND BUILD_ARGS "/m")
endif()
elseif(_VCPKG_CMAKE_GENERATOR MATCHES "NMake")
# No options are currently added for nmake builds
else()
message(FATAL_ERROR "Unrecognized GENERATOR setting from vcpkg_configure_cmake(). Valid generators are: Ninja, Visual Studio, and NMake Makefiles")
endif()

if(EXISTS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/build.ninja)
set(BUILD_ARGS -v) # verbose output
endif()

if(_bc_MSVC_64_TOOLSET)
set(BUILD_ARGS ${MSVC_EXTRA_ARGS})
if(_bc_TARGET)
set(TARGET_PARAM "--target" ${_bc_TARGET})
else()
set(TARGET_PARAM)
endif()

message(STATUS "Build ${TARGET_TRIPLET}-rel")
vcpkg_execute_required_process(
COMMAND ${CMAKE_COMMAND} --build . --config Release -- ${BUILD_ARGS}
COMMAND ${CMAKE_COMMAND} --build . --config Release ${TARGET_PARAM} -- ${BUILD_ARGS}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
LOGNAME build-${TARGET_TRIPLET}-rel
LOGNAME ${_bc_LOGFILE_ROOT}-${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 -- ${BUILD_ARGS}
COMMAND ${CMAKE_COMMAND} --build . --config Debug ${TARGET_PARAM} -- ${BUILD_ARGS}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
LOGNAME build-${TARGET_TRIPLET}-dbg
LOGNAME ${_bc_LOGFILE_ROOT}-${TARGET_TRIPLET}-dbg
)
message(STATUS "Build ${TARGET_TRIPLET}-dbg done")
endfunction()
2 changes: 2 additions & 0 deletions scripts/cmake/vcpkg_configure_cmake.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -188,4 +188,6 @@ function(vcpkg_configure_cmake)
LOGNAME config-${TARGET_TRIPLET}-dbg
)
message(STATUS "Configuring ${TARGET_TRIPLET}-dbg done")

set(_VCPKG_CMAKE_GENERATOR "${GENERATOR}" PARENT_SCOPE)
endfunction()
50 changes: 5 additions & 45 deletions scripts/cmake/vcpkg_install_cmake.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
##
## ## Usage:
## ```cmake
## vcpkg_install_cmake([MSVC_64_TOOLSET])
## vcpkg_install_cmake(...)
## ```
##
## ## Parameters:
## ### MSVC_64_TOOLSET
## This adds the `/p:PreferredToolArchitecture=x64` switch to the underlying buildsystem parameters. Some large projects can run out of memory when linking if they use the 32-bit hosted tools.
## See [`vcpkg_build_cmake()`](vcpkg_build_cmake.md).
##
## ## Notes:
## This command should be preceeded by a call to [`vcpkg_configure_cmake()`](vcpkg_configure_cmake.md).
## This command transparently forwards to [`vcpkg_build_cmake()`](vcpkg_build_cmake.md), adding a `TARGET install`
## parameter.
##
## ## Examples:
##
Expand All @@ -21,45 +21,5 @@
## * [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_install_cmake)
cmake_parse_arguments(_bc "MSVC_64_TOOLSET;DISABLE_PARALLEL" "" "" ${ARGN})

set(MSVC_EXTRA_ARGS
"/p:VCPkgLocalAppDataDisabled=true"
"/p:UseIntelMKL=No"
)

# Specifies the architecture of the toolset, NOT the architecture of the produced binary
# This can help libraries that cause the linker to run out of memory.
# https://support.microsoft.com/en-us/help/2891057/linker-fatal-error-lnk1102-out-of-memory
if (_bc_MSVC_64_TOOLSET)
list(APPEND MSVC_EXTRA_ARGS "/p:PreferredToolArchitecture=x64")
endif()

if (NOT _bc_DISABLE_PARALLEL)
list(APPEND MSVC_EXTRA_ARGS "/m")
endif()

if(EXISTS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/build.ninja)
set(BUILD_ARGS -v) # verbose output
endif()

if(_bc_MSVC_64_TOOLSET)
set(BUILD_ARGS ${MSVC_EXTRA_ARGS})
endif()

message(STATUS "Package ${TARGET_TRIPLET}-rel")
vcpkg_execute_required_process(
COMMAND ${CMAKE_COMMAND} --build . --config Release --target install -- ${BUILD_ARGS}
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 -- ${BUILD_ARGS}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
LOGNAME package-${TARGET_TRIPLET}-dbg
)
message(STATUS "Package ${TARGET_TRIPLET}-dbg done")
vcpkg_build_cmake(LOGFILE_ROOT install TARGET install ${ARGN})
endfunction()

0 comments on commit 2c9ee07

Please sign in to comment.