2017-05-24 23:33:16 -07:00
## # vcpkg_configure_cmake
##
## Configure CMake for Debug and Release builds of a project.
##
## ## Usage
## ```cmake
## vcpkg_configure_cmake(
## SOURCE_PATH <${SOURCE_PATH}>
## [PREFER_NINJA]
## [GENERATOR <"NMake Makefiles">]
## [OPTIONS <-DUSE_THIS_IN_ALL_BUILDS=1>...]
## [OPTIONS_RELEASE <-DOPTIMIZE=1>...]
## [OPTIONS_DEBUG <-DDEBUGGABLE=1>...]
## )
## ```
##
## ## Parameters
## ### SOURCE_PATH
## Specifies the directory containing the `CMakeLists.txt`. By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.
##
## ### PREFER_NINJA
## Indicates that, when available, Vcpkg should use Ninja to perform the build. This should be specified unless the port is known to not work under Ninja.
##
## ### GENERATOR
## Specifies the precise generator to use.
##
## This is useful if some project-specific buildsystem has been wrapped in a cmake script that won't perform an actual build. If used for this purpose, it should be set to "NMake Makefiles".
##
## ### OPTIONS
## Additional options passed to CMake during the configuration.
##
## ### OPTIONS_RELEASE
## Additional options passed to CMake during the Release configuration. These are in addition to `OPTIONS`.
##
## ### OPTIONS_DEBUG
## Additional options passed to CMake during the Debug configuration. These are in addition to `OPTIONS`.
##
## ## Notes
## This command supplies many common arguments to CMake. To see the full list, examine the source.
##
## ## 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)
2016-09-18 20:50:08 -07:00
function ( vcpkg_configure_cmake )
2017-02-03 17:16:13 +01:00
cmake_parse_arguments ( _csc "PREFER_NINJA" "SOURCE_PATH;GENERATOR" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" ${ ARGN } )
2016-09-18 20:50:08 -07:00
2017-01-24 18:55:41 -08:00
if ( NOT VCPKG_PLATFORM_TOOLSET )
2017-04-01 03:58:45 -07:00
message ( FATAL_ERROR "Vcpkg has been updated with VS2017 support, however you need to rebuild vcpkg.exe by re-running bootstrap-vcpkg.bat\n" )
2017-01-24 18:55:41 -08:00
endif ( )
2017-05-03 19:11:29 +02:00
if ( DEFINED ENV{PROCESSOR_ARCHITEW6432} )
2017-04-23 00:11:42 -07:00
set ( _csc_HOST_ARCHITECTURE $ENV{ PROCESSOR_ARCHITEW6432 } )
else ( )
set ( _csc_HOST_ARCHITECTURE $ENV{ PROCESSOR_ARCHITECTURE } )
endif ( )
2016-09-18 20:50:08 -07:00
if ( _csc_GENERATOR )
set ( GENERATOR ${ _csc_GENERATOR } )
2017-04-23 00:11:42 -07:00
elseif ( _csc_PREFER_NINJA AND NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND NOT _csc_HOST_ARCHITECTURE STREQUAL "x86" )
2017-02-03 17:16:13 +01:00
set ( GENERATOR "Ninja" )
2017-01-23 19:25:47 -08:00
elseif ( VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND TRIPLET_SYSTEM_ARCH MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140" )
2016-09-18 20:50:08 -07:00
set ( GENERATOR "Visual Studio 14 2015" )
2017-01-23 19:25:47 -08:00
elseif ( VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND TRIPLET_SYSTEM_ARCH MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140" )
2016-09-18 20:50:08 -07:00
set ( GENERATOR "Visual Studio 14 2015 Win64" )
2017-01-23 19:25:47 -08:00
elseif ( VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND TRIPLET_SYSTEM_ARCH MATCHES "arm" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140" )
2016-09-18 20:50:08 -07:00
set ( GENERATOR "Visual Studio 14 2015 ARM" )
2017-01-23 19:25:47 -08:00
elseif ( TRIPLET_SYSTEM_ARCH MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140" )
2016-09-18 20:50:08 -07:00
set ( GENERATOR "Visual Studio 14 2015" )
2017-01-23 19:25:47 -08:00
elseif ( TRIPLET_SYSTEM_ARCH MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140" )
2016-09-18 20:50:08 -07:00
set ( GENERATOR "Visual Studio 14 2015 Win64" )
2017-03-14 03:59:41 +03:00
elseif ( TRIPLET_SYSTEM_ARCH MATCHES "arm" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140" )
set ( GENERATOR "Visual Studio 14 2015 ARM" )
2017-01-23 19:25:47 -08:00
elseif ( VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND TRIPLET_SYSTEM_ARCH MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141" )
set ( GENERATOR "Visual Studio 15 2017" )
elseif ( VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND TRIPLET_SYSTEM_ARCH MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141" )
set ( GENERATOR "Visual Studio 15 2017 Win64" )
elseif ( VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND TRIPLET_SYSTEM_ARCH MATCHES "arm" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141" )
set ( GENERATOR "Visual Studio 15 2017 ARM" )
elseif ( TRIPLET_SYSTEM_ARCH MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141" )
set ( GENERATOR "Visual Studio 15 2017" )
elseif ( TRIPLET_SYSTEM_ARCH MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141" )
set ( GENERATOR "Visual Studio 15 2017 Win64" )
2017-03-14 03:59:41 +03:00
elseif ( TRIPLET_SYSTEM_ARCH MATCHES "arm" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141" )
set ( GENERATOR "Visual Studio 15 2017 ARM" )
2016-09-18 20:50:08 -07:00
endif ( )
2017-02-03 17:16:13 +01:00
# If we use Ninja, make sure it's on PATH
if ( GENERATOR STREQUAL "Ninja" )
vcpkg_find_acquire_program ( NINJA )
get_filename_component ( NINJA_PATH ${ NINJA } DIRECTORY )
2017-02-08 17:39:31 -08:00
set ( ENV{PATH} "$ENV{PATH};${NINJA_PATH}" )
2017-02-03 17:16:13 +01:00
endif ( )
2016-09-18 20:50:08 -07:00
file ( REMOVE_RECURSE ${ CURRENT_BUILDTREES_DIR } / ${ TARGET_TRIPLET } -rel ${ CURRENT_BUILDTREES_DIR } / ${ TARGET_TRIPLET } -dbg )
2016-10-06 13:46:41 -07:00
if ( DEFINED VCPKG_CMAKE_SYSTEM_NAME )
list ( APPEND _csc_OPTIONS -DCMAKE_SYSTEM_NAME= ${ VCPKG_CMAKE_SYSTEM_NAME } )
endif ( )
if ( DEFINED VCPKG_CMAKE_SYSTEM_VERSION )
list ( APPEND _csc_OPTIONS -DCMAKE_SYSTEM_VERSION= ${ VCPKG_CMAKE_SYSTEM_VERSION } )
endif ( )
2016-10-07 16:34:31 -07:00
if ( DEFINED VCPKG_LIBRARY_LINKAGE AND VCPKG_LIBRARY_LINKAGE STREQUAL dynamic )
list ( APPEND _csc_OPTIONS -DBUILD_SHARED_LIBS=ON )
2016-10-18 15:55:37 -04:00
elseif ( DEFINED VCPKG_LIBRARY_LINKAGE AND VCPKG_LIBRARY_LINKAGE STREQUAL static )
list ( APPEND _csc_OPTIONS -DBUILD_SHARED_LIBS=OFF )
2016-10-06 13:46:41 -07:00
endif ( )
2017-01-23 19:25:47 -08:00
2016-10-06 13:46:41 -07:00
2016-10-11 10:32:40 -07:00
list ( APPEND _csc_OPTIONS
2017-03-31 00:35:40 -07:00
" - D V C P K G _ T A R G E T _ T R I P L E T = $ { T A R G E T _ T R I P L E T } "
2017-02-01 16:19:27 -08:00
" - D C M A K E _ C X X _ F L A G S = / D W I N 3 2 / D _ W I N D O W S / W 3 / u t f - 8 / G R / E H s c / M P "
" - D C M A K E _ C _ F L A G S = / D W I N 3 2 / D _ W I N D O W S / W 3 / u t f - 8 / M P "
2016-12-06 01:26:21 -08:00
" - D C M A K E _ E X P O R T _ N O _ P A C K A G E _ R E G I S T R Y = O N "
" - D C M A K E _ F I N D _ P A C K A G E _ N O _ P A C K A G E _ R E G I S T R Y = O N "
" - D C M A K E _ F I N D _ P A C K A G E _ N O _ S Y S T E M _ P A C K A G E _ R E G I S T R Y = O N "
2017-03-06 10:35:03 -08:00
" - D C M A K E _ I N S T A L L _ S Y S T E M _ R U N T I M E _ L I B S _ S K I P = T R U E "
" - D C M A K E _ V E R B O S E _ M A K E F I L E = O N "
2017-03-21 01:48:40 -07:00
" - D V C P K G _ A P P L O C A L _ D E P S = O F F "
" - D C M A K E _ T O O L C H A I N _ F I L E = $ { V C P K G _ R O O T _ D I R } / s c r i p t s / b u i l d s y s t e m s / v c p k g . c m a k e "
" - D C M A K E _ E R R O R _ O N _ A B S O L U T E _ I N S T A L L _ D E S T I N A T I O N = O N "
2016-10-11 10:32:40 -07:00
)
2016-10-18 15:55:37 -04:00
if ( DEFINED VCPKG_CRT_LINKAGE AND VCPKG_CRT_LINKAGE STREQUAL dynamic )
list ( APPEND _csc_OPTIONS_DEBUG
" - D C M A K E _ C X X _ F L A G S _ D E B U G = / D _ D E B U G / M D d / Z i / O b 0 / O d / R T C 1 "
2016-10-31 16:18:30 -07:00
" - D C M A K E _ C _ F L A G S _ D E B U G = / D _ D E B U G / M D d / Z i / O b 0 / O d / R T C 1 "
2016-10-18 15:55:37 -04:00
)
list ( APPEND _csc_OPTIONS_RELEASE
" - D C M A K E _ C X X _ F L A G S _ R E L E A S E = / M D / O 2 / O i / G y / D N D E B U G / Z i "
" - D C M A K E _ C _ F L A G S _ R E L E A S E = / M D / O 2 / O i / G y / D N D E B U G / Z i "
)
elseif ( DEFINED VCPKG_CRT_LINKAGE AND VCPKG_CRT_LINKAGE STREQUAL static )
list ( APPEND _csc_OPTIONS_DEBUG
" - D C M A K E _ C X X _ F L A G S _ D E B U G = / D _ D E B U G / M T d / Z i / O b 0 / O d / R T C 1 "
2016-10-31 16:18:30 -07:00
" - D C M A K E _ C _ F L A G S _ D E B U G = / D _ D E B U G / M T d / Z i / O b 0 / O d / R T C 1 "
2016-10-18 15:55:37 -04:00
)
list ( APPEND _csc_OPTIONS_RELEASE
" - D C M A K E _ C X X _ F L A G S _ R E L E A S E = / M T / O 2 / O i / G y / D N D E B U G / Z i "
" - D C M A K E _ C _ F L A G S _ R E L E A S E = / M T / O 2 / O i / G y / D N D E B U G / Z i "
)
endif ( )
2016-10-07 12:55:41 -07:00
list ( APPEND _csc_OPTIONS_RELEASE
2016-10-11 04:36:37 -07:00
" - D C M A K E _ S H A R E D _ L I N K E R _ F L A G S _ R E L E A S E = / D E B U G / I N C R E M E N T A L : N O / O P T : R E F / O P T : I C F "
" - D C M A K E _ E X E _ L I N K E R _ F L A G S _ R E L E A S E = / D E B U G / I N C R E M E N T A L : N O / O P T : R E F / O P T : I C F "
2016-10-07 12:55:41 -07:00
)
2016-09-18 20:50:08 -07:00
message ( STATUS "Configuring ${TARGET_TRIPLET}-rel" )
file ( MAKE_DIRECTORY ${ CURRENT_BUILDTREES_DIR } / ${ TARGET_TRIPLET } -rel )
vcpkg_execute_required_process (
C O M M A N D $ { C M A K E _ C O M M A N D } $ { _ c s c _ S O U R C E _ P A T H } $ { _ c s c _ O P T I O N S } $ { _ c s c _ O P T I O N S _ R E L E A S E }
- G $ { G E N E R A T O R }
- D C M A K E _ B U I L D _ T Y P E = R e l e a s e
- D C M A K E _ I N S T A L L _ P R E F I X = $ { C U R R E N T _ P A C K A G E S _ D I R }
W O R K I N G _ D I R E C T O R Y $ { C U R R E N T _ B U I L D T R E E S _ D I R } / $ { T A R G E T _ T R I P L E T } - r e l
L O G N A M E c o n f i g - $ { T A R G E T _ T R I P L E T } - r e l
)
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 (
C O M M A N D $ { C M A K E _ C O M M A N D } $ { _ c s c _ S O U R C E _ P A T H } $ { _ c s c _ O P T I O N S } $ { _ c s c _ O P T I O N S _ D E B U G }
- G $ { G E N E R A T O R }
- D C M A K E _ B U I L D _ T Y P E = D e b u g
- D C M A K E _ I N S T A L L _ P R E F I X = $ { C U R R E N T _ P A C K A G E S _ D I R } / d e b u g
W O R K I N G _ D I R E C T O R Y $ { C U R R E N T _ B U I L D T R E E S _ D I R } / $ { T A R G E T _ T R I P L E T } - d b g
L O G N A M E c o n f i g - $ { T A R G E T _ T R I P L E T } - d b g
)
message ( STATUS "Configuring ${TARGET_TRIPLET}-dbg done" )
endfunction ( )