Skip to content

Commit 37891e2

Browse files
authored
Merge branch 'main' into update-submodules
2 parents 813dde6 + bedfdbd commit 37891e2

File tree

3 files changed

+63
-6
lines changed

3 files changed

+63
-6
lines changed

.github/workflows/ci.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,13 +250,18 @@ jobs:
250250
251251
252252
windows:
253-
runs-on: windows-2022 # latest
253+
runs-on: windows-2022
254254
strategy:
255255
matrix:
256256
arch: [x86, x64]
257257
permissions:
258258
id-token: write # This is required for requesting the JWT
259259
steps:
260+
- uses: actions/setup-python@v5
261+
id: python38
262+
with:
263+
python-version: '3.8.10'
264+
architecture: ${{ matrix.arch }}
260265
- uses: ilammy/setup-nasm@v1
261266
- name: configure AWS credentials (containers)
262267
uses: aws-actions/configure-aws-credentials@v4
@@ -266,7 +271,7 @@ jobs:
266271
- name: Build ${{ env.PACKAGE_NAME }} + consumers
267272
run: |
268273
python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')"
269-
python builder.pyz build -p ${{ env.PACKAGE_NAME }} --python "C:\\hostedtoolcache\\windows\\Python\\3.8.10\\${{ matrix.arch }}\\python.exe"
274+
python builder.pyz build -p ${{ env.PACKAGE_NAME }} --python "${{ steps.python38.outputs.python-path }}"
270275
271276
macos:
272277
runs-on: macos-14 # latest

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,6 @@ AWS_CRT_BUILD_USE_SYSTEM_LIBS=1 python3 -m pip install .
116116
```
117117

118118
If these dependencies are available as both static and shared libs, you can force the static ones to be used by setting: `AWS_CRT_BUILD_FORCE_STATIC_LIBS=1`
119+
120+
### Windows SDK Version
121+
aws-crt-python builds against windows sdk version `10.0.17763.0`. This is the minimal version required for TLS 1.3 support on Windows. If you need a different Windows SDK version, you can set environment variable `AWS_CRT_WINDOWS_SDK_VERSION=<version>` while building from source:

setup.py

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
# sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET').
2626
MACOS_DEPLOYMENT_TARGET_MIN = "10.15"
2727

28+
# This is the minimum version of the Windows SDK needed for schannel.h with SCH_CREDENTIALS and
29+
# TLS_PARAMETERS. These are required to build Windows Binaries with TLS 1.3 support.
30+
WINDOWS_SDK_VERSION_TLS1_3_SUPPORT = "10.0.17763.0"
31+
2832

2933
def parse_version(version_string):
3034
return tuple(int(x) for x in version_string.split("."))
@@ -84,7 +88,7 @@ def determine_cross_compile_args():
8488
return []
8589

8690

87-
def determine_generator_args():
91+
def determine_generator_args(cmake_version=None, windows_sdk_version=None):
8892
if sys.platform == 'win32':
8993
try:
9094
# See which compiler python picks
@@ -110,11 +114,10 @@ def determine_generator_args():
110114
assert (vs_version and vs_year)
111115
except Exception:
112116
raise RuntimeError('No supported version of MSVC compiler could be found!')
117+
vs_version_gen_str = "Visual Studio {} {}".format(vs_version, vs_year)
113118

114119
print('Using Visual Studio', vs_version, vs_year)
115120

116-
vs_version_gen_str = "Visual Studio {} {}".format(vs_version, vs_year)
117-
118121
if vs_year <= 2017:
119122
# For VS2017 and earlier, architecture goes at end of generator string
120123
if is_64bit():
@@ -123,6 +126,17 @@ def determine_generator_args():
123126

124127
# For VS2019 (and presumably later), architecture is passed via -A flag
125128
arch_str = "x64" if is_64bit() else "Win32"
129+
130+
# Set the target windows SDK version. We have a minimum required version of the Windows SDK needed for schannel.h with SCH_CREDENTIALS and
131+
# TLS_PARAMETERS. These are required to build Windows Binaries with TLS 1.3 support.
132+
# Introduced in cmake 3.27+, the generator string supports a version field to specify the windows sdk version in use
133+
# https://cmake.org/cmake/help/latest/variable/CMAKE_GENERATOR_PLATFORM.html#variable:CMAKE_GENERATOR_PLATFORM
134+
if cmake_version >= (3, 27):
135+
# Set windows sdk version to the one that supports TLS 1.3
136+
arch_str += f",version={windows_sdk_version}"
137+
138+
print('Using Visual Studio', vs_version, vs_year, 'with architecture', arch_str)
139+
126140
return ['-G', vs_version_gen_str, '-A', arch_str]
127141

128142
return []
@@ -144,6 +158,21 @@ def get_cmake_path():
144158
raise Exception("CMake must be installed to build from source.")
145159

146160

161+
def get_cmake_version():
162+
"""Return the version of CMake installed on the system."""
163+
cmake_path = get_cmake_path()
164+
if not cmake_path:
165+
return (0, 0, 0)
166+
try:
167+
output = subprocess.check_output([cmake_path, '--version'], text=True)
168+
version_line = output.split('\n')[0]
169+
version = version_line.split(' ')[-1]
170+
print(f"Found CMake version: {version}")
171+
return parse_version(version)
172+
except BaseException:
173+
return (0, 0, 0) # Return a default version if cmake is not found or fails
174+
175+
147176
def using_system_libs():
148177
"""If true, don't build any dependencies. Use the libs that are already on the system."""
149178
return (os.getenv('AWS_CRT_BUILD_USE_SYSTEM_LIBS') == '1'
@@ -227,7 +256,27 @@ def _build_dependencies_impl(self, build_dir, install_path, osx_arch=None):
227256
cmake_args = [cmake]
228257
cmake_args.append(f'-H{source_dir}')
229258
cmake_args.append(f'-B{build_dir}')
230-
cmake_args.extend(determine_generator_args())
259+
260+
if sys.platform == 'win32':
261+
windows_sdk_version = os.getenv('AWS_CRT_WINDOWS_SDK_VERSION')
262+
if windows_sdk_version is None:
263+
windows_sdk_version = WINDOWS_SDK_VERSION_TLS1_3_SUPPORT
264+
265+
cmake_version = get_cmake_version()
266+
267+
cmake_args.extend(
268+
determine_generator_args(
269+
cmake_version=cmake_version,
270+
windows_sdk_version=windows_sdk_version))
271+
272+
if cmake_version < (3, 27):
273+
# Set the target windows SDK version. We have a minimum required version of the Windows SDK needed for schannel.h with SCH_CREDENTIALS and
274+
# TLS_PARAMETERS. These are required to build Windows Binaries with TLS 1.3 support.
275+
# for cmake < 3.27, we have to specify the version with CMAKE_SYSTEM_VERSION. Please note this flag will be
276+
# ignored by cmake versions >= 3.27.
277+
# checkout determine_generator_args() for the case of cmake >= 3.27
278+
cmake_args.append(f'-DCMAKE_SYSTEM_VERSION={windows_sdk_version}')
279+
231280
cmake_args.extend(determine_cross_compile_args())
232281
cmake_args.extend([
233282
f'-DCMAKE_INSTALL_PREFIX={install_path}',

0 commit comments

Comments
 (0)