forked from datastax/cpp-driver
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Windows-Environment.cmake
103 lines (96 loc) · 4.72 KB
/
Windows-Environment.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# Copyright (c) DataStax, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Define library package type
if(BUILD_SHARED_LIBS)
set(PACKAGE_BUILD_TYPE "shared" CACHE STRING "Package build type" FORCE)
else()
set(PACKAGE_BUILD_TYPE "static" CACHE STRING "Package build type" FORCE)
endif()
# Define package architecture type
if(CMAKE_CL_64)
set(PACKAGE_ARCH_TYPE "win64" CACHE STRING "Package architecture type" FORCE)
set(ARCH_TYPE "64" CACHE STRING "Architecture type" FORCE)
else()
set(PACKAGE_ARCH_TYPE "win32" CACHE STRING "Package architecture type" FORCE)
set(ARCH_TYPE "32" CACHE STRING "Architecture type" FORCE)
endif()
# Determine if Visual Studio is available
if(MSVC_VERSION)
# Get the internal and toolset version and VC root directory
if(CMAKE_VS_PLATFORM_TOOLSET)
string(REPLACE "v" "" VS_INTERNAL_VERSION ${CMAKE_VS_PLATFORM_TOOLSET})
endif()
if(DEFINED ENV{APPVEYOR} AND DEFINED ENV{VISUAL_STUDIO_INTERNAL_VERSION})
if (CMAKE_CL_64 AND
($ENV{VISUAL_STUDIO_INTERNAL_VERSION} EQUAL 100 OR
$ENV{VISUAL_STUDIO_INTERNAL_VERSION} EQUAL 110))
# Attempt to handle express/community editions (VS 2010) on AppVeyor
set(VS_INTERNAL_VERSION $ENV{VISUAL_STUDIO_INTERNAL_VERSION})
endif()
endif()
string(LENGTH ${VS_INTERNAL_VERSION} VS_INTERNAL_VERSION_LENGTH)
math(EXPR VS_TOOLSET_MAJOR_VERSION_LENGTH "${VS_INTERNAL_VERSION_LENGTH} - 1")
string(SUBSTRING ${VS_INTERNAL_VERSION} 0 ${VS_TOOLSET_MAJOR_VERSION_LENGTH} VS_TOOLSET_MAJOR_VERSION)
string(SUBSTRING ${VS_INTERNAL_VERSION} ${VS_TOOLSET_MAJOR_VERSION_LENGTH} -1 VS_TOOLSET_MINOR_VERSION)
set(VS_TOOLSET_VERSION "${VS_TOOLSET_MAJOR_VERSION}.${VS_TOOLSET_MINOR_VERSION}")
# Get the command VC directories for environment scripts
if(DEFINED ENV{APPVEYOR} AND DEFINED ENV{VISUAL_STUDIO_INTERNAL_VERSION})
if($ENV{VISUAL_STUDIO_INTERNAL_VERSION} EQUAL 100 OR
$ENV{VISUAL_STUDIO_INTERNAL_VERSION} EQUAL 110)
# Attempt to handle express/community editions (VS 2010/2012) on AppVeyor
set(CMAKE_VS_DEVENV_COMMAND "$ENV{ProgramFiles}/Microsoft Visual Studio ${VS_TOOLSET_VERSION}/Common7/IDE/devenv.exe")
endif()
endif()
get_filename_component(DEVENV_DIR ${CMAKE_VS_DEVENV_COMMAND} DIRECTORY)
get_filename_component(VS_VC_DIR ${DEVENV_DIR}/../../VC ABSOLUTE)
get_filename_component(VS_TOOLS_DIR ${DEVENV_DIR}/../../Common7/Tools ABSOLUTE)
get_filename_component(VS_BUILD_DIR ${VS_VC_DIR}/Auxiliary/Build ABSOLUTE)
# Determine if a modern version of MSVC is being used
if(VS_INTERNAL_VERSION EQUAL 141 OR VS_INTERNAL_VERSION GREATER 141) # Visual Studio 2017
# Determine the target architecture for the Visual Studio environment
if(CMAKE_CL_64)
set(MSVC_ENVIRONMENT_SCRIPT "${VS_BUILD_DIR}/vcvarsx86_amd64.bat" CACHE STRING "Visual Studio environment script" FORCE)
else()
set(MSVC_ENVIRONMENT_SCRIPT "${VS_BUILD_DIR}/vcvars32.bat" CACHE STRING "Visual Studio environment script" FORCE)
endif()
else()
# Determine if we are in a CI environment
if(DEFINED ENV{APPVEYOR})
set(MSVC_ENVIRONMENT_SCRIPT "${VS_VC_DIR}/vcvarsall.bat" CACHE STRING "Visual Studio environment script" FORCE)
if(CMAKE_CL_64)
set(MSVC_ENVIRONMENT_ARCH "x86_amd64" CACHE STRING "Visual Studio environment architecture" FORCE)
else()
set(MSVC_ENVIRONMENT_ARCH "x86" CACHE STRING "Visual Studio environment architecture" FORCE)
endif()
else()
# Determine the target architecture for the Visual Studio environment
if(CMAKE_CL_64)
set(MSVC_ENVIRONMENT_SCRIPT "${VS_VC_DIR}/bin/x86_amd64/vcvarsx86_amd64.bat" CACHE STRING "Visual Studio environment script" FORCE)
else()
set(MSVC_ENVIRONMENT_SCRIPT "${VS_TOOLS_DIR}/vsvars32.bat" CACHE STRING "Visual Studio environment script" FORCE)
endif()
endif()
endif()
# Ensure the script exists
if(NOT EXISTS ${MSVC_ENVIRONMENT_SCRIPT})
unset(MSVC_ENVIRONMENT_SCRIPT)
unset(VS_INTERNAL_VERSION)
unset(VS_VC_DIR)
unset(VS_BUILD_DIR)
unset(VS_TOOLS_DIR)
message(FATAL_ERROR "Unable to locate Visual Studio environment script")
endif()
# Ensure the Visual Studio environment script can be invoked by a batch script
file(TO_NATIVE_PATH ${MSVC_ENVIRONMENT_SCRIPT} MSVC_ENVIRONMENT_SCRIPT)
endif()