diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eff75483f..928c2f5f7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -105,13 +105,18 @@ jobs: aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ env.LINUX_BASE_IMAGE }} build -p ${{ env.PACKAGE_NAME }} --cmake-extra=-DUSE_CPU_EXTENSIONS=OFF - windows: + windows-sanitizer: runs-on: windows-2022 # latest steps: + - name: Setup MSVC dev env (san, etc...) + uses: TheMrMilchmann/setup-msvc-dev@v3 + with: + arch: x64 + # note: default sanitizer pair is address,undefined. win currently only supports address. - name: Build ${{ env.PACKAGE_NAME }} + consumers run: | python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" - python builder.pyz build -p ${{ env.PACKAGE_NAME }} + python builder.pyz build -p ${{ env.PACKAGE_NAME }} --cmake-extra=-DENABLE_SANITIZERS=ON windows-vc16: runs-on: windows-2022 # latest diff --git a/cmake/AwsSanitizers.cmake b/cmake/AwsSanitizers.cmake index c078575c1..1f628112d 100644 --- a/cmake/AwsSanitizers.cmake +++ b/cmake/AwsSanitizers.cmake @@ -65,8 +65,18 @@ function(aws_add_sanitizers target) endforeach() if(PRESENT_SANITIZERS) - target_compile_options(${target} PRIVATE -fno-omit-frame-pointer -fsanitize=${PRESENT_SANITIZERS}) - target_link_libraries(${target} PUBLIC "-fno-omit-frame-pointer -fsanitize=${PRESENT_SANITIZERS}") + if(MSVC) + if(AWS_ARCH_INTEL_X64) + target_compile_options(${target} PRIVATE -fsanitize=${PRESENT_SANITIZERS}) + target_link_libraries(${target} PRIVATE clang_rt.asan_dynamic-x86_64 clang_rt.asan_dynamic_runtime_thunk-x86_64) + else() + message("On Win platforms sanitizer is only supported on x86-64") + return() + endif() + else() + target_compile_options(${target} PRIVATE -fno-omit-frame-pointer -fsanitize=${PRESENT_SANITIZERS}) + target_link_libraries(${target} PUBLIC "-fsanitize=${PRESENT_SANITIZERS}") + endif() string(REPLACE "," ";" PRESENT_SANITIZERS "${PRESENT_SANITIZERS}") set(${target}_SANITIZERS ${PRESENT_SANITIZERS} PARENT_SCOPE)