Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add CI for Windows MSVC2019, MSVC2022, and SDE 32/64-bit #1228

Merged
merged 11 commits into from
Oct 24, 2023
95 changes: 95 additions & 0 deletions .github/workflows/windows.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: Windows Tests
on:
pull_request:
branches: [ '*' ]

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: true

env:
GOPROXY: https://proxy.golang.org,direct
SDE_MIRROR_URL: "https://downloadmirror.intel.com/777395/sde-external-9.21.1-2023-04-24-win.tar.xz"
SDE_VERSION_TAG: sde-external-9.21.1-2023-04-24-win

jobs:
MSVC-2019:
runs-on: temporary-performance-testing_windows-2019_8-core
steps:
- name: Git clone the repository
uses: actions/checkout@v3
- name: Build Windows Dependencies
run: |
choco install ninja --version 1.9.0.20190208 -y &&
choco install nasm --version 2.14.02 -y
- name: Run Windows Tests on MSVC-2019
run: |
.\tests\ci\run_windows_tests.bat "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64

MSVC-2022:
runs-on: temporary-performance-testing_windows-latest_8-core
steps:
- name: Git clone the repository
uses: actions/checkout@v3
- name: Build Windows Dependencies
run: |
choco install ninja --version 1.9.0.20190208 -y &&
choco install nasm --version 2.14.02 -y
- name: Run Windows Tests on MSVC-2022
run: |
.\tests\ci\run_windows_tests.bat "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64

SDE-64-bit:
# TODO: Update this to run on windows-2022. windows-2022 (Windows 11) has phased out support for older processors.
# https://learn.microsoft.com/en-us/windows-hardware/design/minimum/supported/windows-11-supported-intel-processors
runs-on: temporary-performance-testing_windows-2019_64-core
steps:
- name: Git clone the repository
uses: actions/checkout@v3

- name: Build Windows Dependencies
run: |
choco install ninja --version 1.9.0.20190208 -y &&
choco install nasm --version 2.14.02 -y

- name: Install SDE simulator
run: |
curl -SL --output temp.tar.xz ${{ env.SDE_MIRROR_URL }}
7z x temp.tar.xz
7z x temp.tar
ren ${{ env.SDE_VERSION_TAG }} windows-sde
del temp.tar.xz
del temp.tar

- name: Run Windows SDE Tests for 64 bit
run: |
$env:SDEROOT = "${PWD}\windows-sde"
echo ${env:SDEROOT}
.\tests\ci\run_windows_tests.bat "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 true

SDE-32-bit:
runs-on: temporary-performance-testing_windows-2019_64-core
steps:
- name: Git clone the repository
uses: actions/checkout@v3

- name: Build Windows Dependencies
run: |
choco install ninja --version 1.9.0.20190208 -y &&
choco install nasm --version 2.14.02 -y

- name: Install SDE simulator
run: |
curl -SL --output temp.tar.xz ${{ env.SDE_MIRROR_URL }}
7z x temp.tar.xz
7z x temp.tar
ren ${{ env.SDE_VERSION_TAG }} windows-sde
del temp.tar.xz
del temp.tar

- name: Run Windows SDE Tests for 32 bit
run: |
$env:SDEROOT = "${PWD}\windows-sde"
echo ${env:SDEROOT}
.\tests\ci\run_windows_tests.bat "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 true

2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1054,7 +1054,7 @@ if(BUILD_TESTING)
add_custom_target(
run_tests_valgrind
COMMAND ${GO_EXECUTABLE} run util/all_tests.go -build-dir
${PROJECT_BINARY_DIR} -valgrind=true -valgrind-supp-dir "tests/ci"
${PROJECT_BINARY_DIR} -valgrind=true -valgrind-supp-dir="tests/ci"
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
DEPENDS all_tests
${MAYBE_USES_TERMINAL})
Expand Down
10 changes: 9 additions & 1 deletion crypto/impl_dispatch_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,15 @@ class ImplDispatchTest : public ::testing::Test {
aes_hw_ = CRYPTO_is_AESNI_capable();
avx_movbe_ = CRYPTO_is_AVX_capable() && CRYPTO_is_MOVBE_capable();
aes_vpaes_ = CRYPTO_is_SSSE3_capable();
sha_ext_ = CRYPTO_is_SHAEXT_capable();
sha_ext_ =
// TODO(CryptoAlg-2137): sha_ext_ isn't enabled on Windows Debug Builds with newer
// 32-bit Intel processors.
#if !(defined(OPENSSL_WINDOWS) && defined(OPENSSL_X86) && !defined(NDEBUG))
CRYPTO_is_SHAEXT_capable();
#else
false;
#endif

vaes_vpclmulqdq_ =
#if !defined(OPENSSL_WINDOWS)
// crypto_gcm_avx512_enabled excludes Windows
Expand Down
12 changes: 9 additions & 3 deletions tests/ci/cdk/cdk/codebuild/github_ci_windows_x86_omnibus.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,26 @@ version: 0.2
batch:
build-list:
- identifier: windows_msvc2015_x64
buildspec: ./tests/ci/codebuild/windows-x86/windows-msvc2015.yml
buildspec: ./tests/ci/codebuild/windows/run_windows_target.yml
env:
# https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html
type: WINDOWS_SERVER_2019_CONTAINER
privileged-mode: false
compute-type: BUILD_GENERAL1_LARGE
# Build failure on Docker image `vs2015_latest`, tracked in CryptoAlg-741.
image: 620771051181.dkr.ecr.us-west-2.amazonaws.com/aws-lc-docker-images-windows-x86:vs2015_latest
variables:
MSVC_PATH: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat'
ARCH_OPTION: x64

- identifier: windows_msvc2017_x64
buildspec: ./tests/ci/codebuild/windows-x86/windows-msvc2017.yml
buildspec: ./tests/ci/codebuild/windows/run_windows_target.yml
env:
# https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html
type: WINDOWS_SERVER_2019_CONTAINER
privileged-mode: false
compute-type: BUILD_GENERAL1_LARGE
image: 620771051181.dkr.ecr.us-west-2.amazonaws.com/aws-lc-docker-images-windows-x86:vs2017_latest
variables:
# vcvarsall will set the required lib and libpath for MSVC to compile everything
MSVC_PATH: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat'
ARCH_OPTION: x64
14 changes: 0 additions & 14 deletions tests/ci/codebuild/windows-x86/windows-msvc2017.yml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,4 @@ env:
phases:
build:
commands:
# vcvarsall will set the required lib and libpath for MSVC to compile everything
- .\tests\ci\run_windows_tests.bat "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
- .\tests\ci\run_windows_tests.bat "${MSVC_PATH}" "${ARCH_OPTION}" "${RUN_SDE}"
14 changes: 14 additions & 0 deletions tests/ci/docker_images/windows/vs2017/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
# Keep parity with the upstream tags at https://hub.docker.com/_/microsoft-windows-servercore
FROM aws-lc/windows_base:2019

ENV SDE_VERSION_TAG=sde-external-9.21.1-2023-04-24-win
ENV SDE_MIRROR_URL="https://downloadmirror.intel.com/777395/sde-external-9.21.1-2023-04-24-win.tar.xz"

andrewhop marked this conversation as resolved.
Show resolved Hide resolved
SHELL ["cmd", "/S", "/C"]
RUN `
# Download the Build Tools bootstrapper.
Expand All @@ -22,7 +25,18 @@ RUN `
# Cleanup
&& del /q vs_buildtools.exe

RUN `
# Install Windows Intel SDE.
curl -SL --output temp.tar.xz %SDE_MIRROR_URL% `
`
&& 7z x temp.tar.xz `
&& 7z x temp.tar `
&& ren %SDE_VERSION_TAG% windows-sde `
&& del temp.tar.xz `
&& del temp.tar

RUN setx /M PATH "%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin"

RUN setx /M SDEROOT C:/windows-sde

CMD [ "cmd.exe" ]
3 changes: 3 additions & 0 deletions tests/ci/docker_images/windows/windows_base/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@ ADD https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963
RUN start /wait C:\vc_redist.x64.exe /quiet /norestart

# Install chocolatey
# https://stackoverflow.com/questions/76470752/chocolatey-installation-in-docker-started-to-fail-restart-due-to-net-framework
ENV chocolateyVersion=1.4.0
# https://chocolatey.org/docs/troubleshooting#the-request-was-aborted-could-not-create-ssltls-secure-channel
RUN @powershell Set-ExecutionPolicy Bypass -Scope Process -Force; [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12; $env:chocolateyUseWindowsCompression = 'true'; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

RUN choco install git --version 2.23.0 -y && `
choco install 7zip.install -y && `
choco install ninja --version 1.9.0.20190208 -y && `
choco install strawberryperl --version 5.32.0.1 -y && `
choco install nasm --version 2.14.02 -y && `
Expand Down
42 changes: 39 additions & 3 deletions tests/ci/run_windows_tests.bat
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,26 @@ set SRC_ROOT=%cd%
set BUILD_DIR=%SRC_ROOT%\test_build_dir

@rem %1 contains the path to the setup batch file for the version of of visual studio that was passed in from the build spec file.
@rem x64 comes from the architecture options https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line
@rem %2 specifies the architecture option to build against: https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line
@rem %3 is to indicate running SDE simulation tests. If not set, SDE tests are not run.
set MSVC_PATH=%1
call %MSVC_PATH% x64 || goto error
set ARCH_OPTION=%2
if "%~3"=="" ( set RUN_SDE=false ) else ( set RUN_SDE=%3 )
call %MSVC_PATH% %ARCH_OPTION% || goto error
SET

@echo on
if /i "%RUN_SDE%" == "false " (
goto :run_basic_tests
) else if /i "%RUN_SDE%" == "true " (
goto :run_sde_tests
) else (
@rem Unrecognized option
goto error
)
goto :EOF

:run_basic_tests
@rem Run the same builds as run_posix_tests.sh
@rem Check which version of MSVC we're building with: remove 14.0 from the path to the compiler and check if it matches the
@rem original string. MSVC 14 has an issue with a missing DLL that causes the debug unit tests to fail
Expand All @@ -23,8 +38,13 @@ call :build_and_test Release "-DBUILD_SHARED_LIBS=1" || goto error
call :build_and_test Release "-DBUILD_SHARED_LIBS=1 -DFIPS=1" || goto error
@rem For FIPS on Windows we also have a RelWithDebInfo build to generate debug symbols.
call :build_and_test RelWithDebInfo "-DBUILD_SHARED_LIBS=1 -DFIPS=1" || goto error
exit /b 0

goto :EOF
:run_sde_tests
@rem Run and test the same dimensions as our Linux SDE tests.
call :build_and_test_with_sde Debug "" || goto error
call :build_and_test_with_sde Release "" || goto error
exit /b 0

@rem %1 is the build type (e.g. Release/Debug)
@rem %2 is the additional full CMake args
Expand All @@ -34,6 +54,14 @@ call :build %1 %2 || goto error
call :test %1 %2 || goto error
exit /b 0

@rem %1 is the build type (e.g. Release/Debug)
@rem %2 is the additional full CMake args
:build_and_test_with_sde
@echo on
call :build %1 %2 || goto error
call :test_with_sde %1 %2 || goto error
exit /b 0

@rem Use the same parameters as build_and_test
:build
@echo on
Expand All @@ -57,6 +85,14 @@ ninja run_tests || goto error
@echo LOG: %date%-%time% %1 %2 tests complete
exit /b %errorlevel%

@rem Runs the SDE simulator tests, this assumes the build is complete
:test_with_sde
@echo on
@echo LOG: %date%-%time% %1 %2 build finished, starting tests with SDE
ninja run_tests_with_sde || goto error
@echo LOG: %date%-%time% %1 %2 SDE tests complete
exit /b %errorlevel%

:error
echo Failed with error #%errorlevel%.
exit /b 1